本地(sdcard)音乐视频(视频播放带有左半屏亮度右半屏音量)播放

/***********************************************************************************************************
 * 文件名:
 * 描述:音乐播放工具类直接实例化调用
 * 时间:2018/4/23 17:40
 * 版权:
 ***********************************************************************************************************/

public class MusicPlayer {
    private static Context context;
    private static MediaPlayer mPlayer;
    private static MusicPlayer musicPlayer;


    public MusicPlayer(Context context){
        this.context=context;
    }

    public synchronized static MusicPlayer getInstance(Context context){
        if(musicPlayer==null){
            musicPlayer=new MusicPlayer(context);
        }
        if(mPlayer==null){
            mPlayer=new MediaPlayer();
        }
        return musicPlayer;
    }
    //播放
    public void playMusic(String url) {
            mPlayer.setVolume(1f,1f);
            mPlayer.reset();
            try {
                mPlayer.setDataSource(context, Uri.parse(url));
                //异步准备
                mPlayer.prepareAsync();
                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mediaPlayer) {
                        mPlayer.start();
                        Toast.makeText(context,"播放中",Toast.LENGTH_SHORT).show();
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }

        //播放完成
        mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mPlayer.stop();
                mPlayer.release();
                mPlayer = null;
            }
        });
        //播放错误
        mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mediaPlayer, int what, int extra) {
                return false;
            }
        });
    }
    //停止
    public void stopMusic(){
            mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
    }

}

/***********************************************************************************************************
 * 文件名:
 * 描述:视频播放(循环播放)工具类
 * 时间:2018/4/23 17:41
 * 版权:
 ***********************************************************************************************************/

public class VideoPlayer {
    private static VideoPlayer vedioPlayer;
    private static Context context;
    private GestureDetector gestureDetector;
    private static int k;
    private static int i=0;
    private ArrayList<String> videolist=new ArrayList<>();

    public VideoPlayer(Context context ){
        this.context=context;
    }

    public synchronized static VideoPlayer getInstance(Context context ){
        if(vedioPlayer==null){
            vedioPlayer=new VideoPlayer(context);
        }
        return vedioPlayer;
    }

    public void initVideo(final VideoView video_player){

        //确定路径
        videolist.add("file:///sdcard/xinxilanyanshimeijing.mp4");
        videolist.add("file:///sdcard/yinnimeijingjiatianxia.mp4");
        videolist.add("file:///sdcard/zixindeliudafaze.mp4");

            String url=videolist.get(i);
            if(video_player!=null&&url!=null){
                //设置视频控制器
                video_player.setMediaController(new MediaController(context));
                //设置视频路径
                video_player.setVideoURI(Uri.parse(url));
                //开始播放视频
                video_player.start();
                ToastUtils.show(new WeakReference<Context>(context),context.getString(R.string.str_playing));
                //监听播放完成
                video_player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        i++;
                        //设置视频控制器
                        video_player.setMediaController(new MediaController(context));
                        //设置视频路径
                        video_player.setVideoURI(Uri.parse(videolist.get(i)));
                        //开始播放视频
                        video_player.start();
                        if(i==2){
                            i=-1;
                        }
                    }
                });
            }else {
                Toast.makeText(context,"SD卡路径为空",Toast.LENGTH_SHORT).show();
                return;
            }
    }
    //设置音量亮度
    public GestureDetector setGestureDetector(final Window window, final AudioManager audioManager){
        gestureDetector = new GestureDetector(new GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent motionEvent) {
                return false;
            }
            @Override
            public void onShowPress(MotionEvent motionEvent){}
            @Override
            public boolean onSingleTapUp(MotionEvent motionEvent) {
                return false;
            }
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                if(e1.getY()-e2.getY()>0.5&&Math.abs(distanceY)>0.5){
                    if(e1.getX()<500){
                        setLightness(10,window);
                    } else{
                        setAudio(1,audioManager);
                    }
                }
                if(e1.getY()-e2.getY()<0.5&&Math.abs(distanceY)>0.5){
                    Log.d("==g==", e1.getY() + "");
                    if(e1.getX()<500){
                        setLightness(-10,window);
                    }else{
                        setAudio(-1,audioManager);
                    }
                }
                return true;
            }
            @Override
            public void onLongPress(MotionEvent motionEvent) {
            }
            //抛
            @Override
            public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                return false;
            }
        });
        return gestureDetector;
    }
    //加减音量
    public void setAudio(int volume, AudioManager audioManager) {
        //当前音量
        k = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        //最大音量
        int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        Log.d("==d==", "" + max);
        Log.d("==d==", "" + k);
        k = k + volume;
        if (k >= 0 && k <= max) {
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, k, AudioManager.FLAG_PLAY_SOUND);
        } else {
            return;
        }
    }
    //设置亮度
    private void setLightness(float lightness,Window window) {
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        //屏幕的亮度,最大是255
        layoutParams.screenBrightness =layoutParams.screenBrightness+lightness/255f;
        if(layoutParams.screenBrightness>1){
            layoutParams.screenBrightness=1;
        }else if(layoutParams.screenBrightness<0.0){
            layoutParams.screenBrightness=0.0f;
        }
        window.setAttributes(layoutParams);
    }
}
视频播放的Activity:

public class VideoActivity extends AppCompatActivity {

    private VideoView video_view;
    private Window window;
    private AudioManager audioManager;
    private TextView lightvolume_tv;
    private GestureDetector gestureDetector;
    private VideoPlayer videoPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        initView();
        initVideo();
    }

    private void initVideo() {
        //实例化视频工具类
        videoPlayer = VideoPlayer.getInstance(this);
        //播放
        videoPlayer.initVideo(video_view);
        gestureDetector =videoPlayer .setGestureDetector(window, audioManager);
    }

    //初始化
    private void initView() {
        video_view =  findViewById(R.id.video_view);
        lightvolume_tv = findViewById(R.id.lightvolume_tv);
        window = getWindow();
        audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    }
    //结合设置亮度音量
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                if(event.getX()<500){
                    try {
                        WindowManager.LayoutParams layoutParams =getWindow().getAttributes();
                        int screenBrightness = (int) (layoutParams.screenBrightness*100);
                        lightvolume_tv.setVisibility(View.VISIBLE);
                        lightvolume_tv.setText("当前亮度:"+screenBrightness+"%");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else {
                    int volmue=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                    int maxVolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                    int vp=volmue*100/maxVolume;
                    lightvolume_tv.setVisibility(View.VISIBLE);
                    lightvolume_tv.setText("当前音量:"+vp+"%");
                }
                break;
            case MotionEvent.ACTION_UP:
                new Handler().postDelayed(new Runnable(){
                    public void run() {
                        lightvolume_tv.setVisibility(View.GONE);
                    }
                }, 1000);
                break;
            default:
                break;
        }
        return gestureDetector.onTouchEvent(event);
    }
}
xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.haribit.audioplayer.activity.VideoActivity">


    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"/>
    <TextView
        android:id="@+id/lightvolume_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_centerInParent="true"/>

</RelativeLayout>

猜你喜欢

转载自blog.csdn.net/duanmuyang/article/details/80089472