lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.ypx.imagepicker.helper;
 
import android.content.Context;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.VideoView;
 
import com.ypx.imagepicker.bean.ImageItem;
import com.ypx.imagepicker.views.PickerUiConfig;
import com.ypx.imagepicker.presenter.IPickerPresenter;
 
/**
 * Time: 2019/9/30 9:45
 * Author:ypx
 * Description: 视频播放
 */
public class VideoViewContainerHelper {
    private VideoView videoView;
    private ImageView previewImg;
    private ImageView pauseImg;
 
    public void loadVideoView(ViewGroup parent, ImageItem imageItem, IPickerPresenter presenter, PickerUiConfig uiConfig) {
        Context context = parent.getContext();
 
        if (videoView == null) {
            videoView = new VideoView(context);
            videoView.setBackgroundColor(Color.TRANSPARENT);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT);
            params.gravity = Gravity.CENTER;
            videoView.setLayoutParams(params);
 
            previewImg = new ImageView(context);
            previewImg.setLayoutParams(params);
            previewImg.setScaleType(ImageView.ScaleType.FIT_CENTER);
 
            pauseImg = new ImageView(context);
            pauseImg.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            pauseImg.setImageDrawable(context.getResources().getDrawable(uiConfig.getVideoPauseIconID()));
            FrameLayout.LayoutParams params2 = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            params2.gravity = Gravity.CENTER;
            pauseImg.setLayoutParams(params2);
        }
        pauseImg.setVisibility(View.GONE);
        parent.removeAllViews();
        parent.addView(videoView);
        parent.addView(previewImg);
        parent.addView(pauseImg);
        previewImg.setVisibility(View.VISIBLE);
        presenter.displayImage(previewImg, imageItem, 0, false);
        videoView.setVideoPath(imageItem.path);
        videoView.start();
        //监听视频播放完的代码
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mPlayer) {
                mPlayer.start();
                mPlayer.setLooping(true);
            }
        });
 
        videoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (videoView.isPlaying()) {
                    onPause();
                } else {
                    onResume();
                }
            }
        });
 
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
                    @Override
                    public void onSeekComplete(MediaPlayer mp) {
                        videoView.start();
                    }
                });
                mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                    @Override
                    public boolean onInfo(MediaPlayer mp, int what, int extra) {
                        if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                            // video 视屏播放的时候把背景设置为透明
                            videoView.setBackgroundColor(Color.TRANSPARENT);
                            previewImg.setVisibility(View.GONE);
                            return true;
                        }
                        return false;
                    }
                });
            }
        });
    }
 
    public void onResume() {
        if (videoView != null && pauseImg != null) {
            videoView.start();
            videoView.seekTo(videoView.getCurrentPosition());
            pauseImg.setVisibility(View.GONE);
        }
    }
 
    public void onPause() {
        if (videoView != null && pauseImg != null) {
            videoView.pause();
            pauseImg.setVisibility(View.VISIBLE);
        }
    }
 
    public void onDestroy() {
        if (videoView != null) {
            videoView.suspend();//将VideoView所占用的资源释放掉
        }
    }
}