package org.cuieney.videolife.ui.act; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.ViewPager; import android.text.format.DateUtils; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import org.cuieney.videolife.R; import org.cuieney.videolife.common.base.SimpleActivity; import org.cuieney.videolife.entity.MusicListBean; import org.cuieney.videolife.entity.wyBean.TracksBean; import org.cuieney.videolife.ui.adapter.CoverFlowAdapter; import java.io.IOException; import java.util.List; import java.util.Random; import butterknife.BindView; import tv.danmaku.ijk.media.player.IMediaPlayer; import tv.danmaku.ijk.media.player.IjkMediaPlayer; /** * Created by cuieney on 17/3/5. */ public class PlayMusciActivity extends SimpleActivity { public static final String DATA = "DATA"; @BindView(R.id.back) ImageView back; @BindView(R.id.play_pause) ImageView mPlayPause; @BindView(R.id.model) ImageView model; @BindView(R.id.next) ImageView next; @BindView(R.id.share) ImageView share; @BindView(R.id.title) TextView title; @BindView(R.id.name) TextView name; @BindView(R.id.controller) RelativeLayout controller; @BindView(R.id.current_time) TextView mStart; @BindView(R.id.progress) SeekBar mSeekbar; @BindView(R.id.total_time) TextView mEnd; @BindView(R.id.progress_controller) LinearLayout progressController; @BindView(R.id.viewpager) ViewPager mVpcontent; @BindView(R.id.progressBar1) ProgressBar mLoading; private MusicListBean tracksBean; private List<TracksBean> nowPlayList; private CoverFlowAdapter adapter; private IjkMediaPlayer player; private int playerIndex = 0; public Handler mHandler; public Runnable mRunnable; private boolean isContainue = true; private int mode = 0; @Override protected int getLayout() { return R.layout.acitivty_play_music; } protected void initEventAndData() { Intent intent = getIntent(); Bundle extras = intent.getExtras(); tracksBean = extras.getParcelable(DATA); initGallery(); initListener(); initMeida(); } private void initMeida() { player = new IjkMediaPlayer(); player.reset(); player.setOnPreparedListener(iMediaPlayer -> { iMediaPlayer.start(); mStart.setText("00:00"); mEnd.setText(DateUtils.formatElapsedTime(iMediaPlayer.getDuration() / 1000)); }); player.setOnErrorListener((iMediaPlayer, i, i1) -> { iMediaPlayer.pause(); return false; }); player.setOnCompletionListener(iMediaPlayer -> { changeMusic(); }); player.setOnSeekCompleteListener(IMediaPlayer::start); playMusic(); } private void changeMusic() { int index = playerIndex; switch (mode) { case 1: index += 1; break; case 2: playMusic(); break; case 0: Random random = new Random(); int anInt = random.nextInt(10); if (anInt == index) { anInt = random.nextInt(10); } index = anInt; break; } mVpcontent.setCurrentItem(index, true); } private void playMusic() { try { player.reset(); player.setDataSource(nowPlayList.get(playerIndex).getFilename()); player.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } } private void initListener() { back.setOnClickListener(v -> finish()); mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { player.pause(); } @Override public void onStopTrackingTouch(SeekBar seekBar) { double time = player.getDuration() * (seekBar.getProgress() * 0.01); player.seekTo((long) time); } }); mPlayPause.setOnClickListener(v -> { if (player.isPlaying()) { mPlayPause.setImageResource(R.drawable.play_msc_icon); player.pause(); } else { player.start(); mPlayPause.setImageResource(R.drawable.pause_msc_icon); } }); model.setOnClickListener(v -> { switch (mode) { case 0: mode = 1; model.setImageResource(R.drawable.circle_icon); break; case 1: mode = 2; model.setImageResource(R.drawable.single_play_icon); break; case 2: mode = 0; model.setImageResource(R.drawable.random_icon); break; } }); next.setOnClickListener(v -> { changeMusic(); }); updateProgress(); } private void updateProgress() { mRunnable = new Runnable() { @Override public void run() { if (isContainue) { mHandler.postDelayed(this, 1000); } runOnUiThread(() -> { if (player != null) { int progress = (int) ((player.getCurrentPosition() * 1f / player.getDuration() * 1f) * 100); mSeekbar.setProgress(progress); mStart.setText(DateUtils.formatElapsedTime(player.getCurrentPosition() / 1000)); } }); } }; mHandler = new Handler(); if (isContainue) { mHandler.postDelayed(mRunnable, 1000); } } private void initGallery() { final List<TracksBean> nowPlayList = tracksBean.getTracks(); if (nowPlayList == null || nowPlayList.size() == 0) { return; } this.nowPlayList = nowPlayList; adapter = new CoverFlowAdapter(nowPlayList, this); mVpcontent.setAdapter(adapter); mVpcontent.setOffscreenPageLimit(3); mVpcontent.setPageTransformer(true, new ScalePageTransformer()); title.setText(nowPlayList.get(0).getSongname()); name.setText(nowPlayList.get(0).getSonger()); mVpcontent.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(final int position) { playerIndex = position; title.setText(nowPlayList.get(position).getSongname()); name.setText(nowPlayList.get(position).getSonger()); playMusic(); } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { } } }); } public class ScalePageTransformer implements ViewPager.PageTransformer { private static final String TAG = "ScalePageTransformer"; public static final float MAX_SCALE = 1.0f; public static final float MIN_SCALE = 0.8f; @Override public void transformPage(View page, float position) { if (position < -1) { position = -1; } else if (position > 1) { position = 1; } float tempScale = position < 0 ? 1 + position : 1 - position; float slope = (MAX_SCALE - MIN_SCALE) / 1; //一个公式 float scaleValue = MIN_SCALE + tempScale * slope; //设置缩放比例 page.setScaleX(scaleValue); page.setScaleY(scaleValue); //设置透明度 page.setAlpha(scaleValue); } } @Override protected void onDestroy() { super.onDestroy(); isContainue = false; if (player.isPlaying()) { player.pause(); player.stop(); player.release(); player = null; } } }