自定义android的photoView使其上下滑动,支持视频播放
时间: 2023-11-28 08:03:56 浏览: 54
要实现这个功能,你可以使用以下步骤:
1. 在你的项目中添加PhotoView库,可以使用以下Gradle依赖:
```gradle
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
```
2. 创建一个自定义的PhotoView类,并继承自PhotoView类,并实现视频播放的功能。你可以使用Android系统自带的VideoView或者其他第三方库来实现视频播放。
```java
public class CustomPhotoView extends PhotoView {
private VideoView mVideoView;
public CustomPhotoView(Context context) {
super(context);
init();
}
public CustomPhotoView(Context context, AttributeSet attr) {
super(context, attr);
init();
}
public CustomPhotoView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle);
init();
}
private void init() {
mVideoView = new VideoView(getContext());
mVideoView.setMediaController(new MediaController(getContext()));
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setLooping(true);
}
});
}
public void setVideoURI(Uri uri) {
mVideoView.setVideoURI(uri);
}
public void startVideo() {
mVideoView.start();
}
public void stopVideo() {
mVideoView.stopPlayback();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
stopVideo();
}
}
```
3. 在布局文件中使用自定义的PhotoView,并设置相应的属性和视频URI。
```xml
<com.example.CustomPhotoView
android:id="@+id/photo_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
app:src="@drawable/photo"
app:video_uri="@raw/video" />
```
4. 在自定义的PhotoView类中处理触摸事件,实现上下滑动的效果。
```java
public class CustomPhotoView extends PhotoView {
private static final int INVALID_POINTER_ID = -1;
private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = INVALID_POINTER_ID;
public CustomPhotoView(Context context) {
super(context);
init();
}
public CustomPhotoView(Context context, AttributeSet attr) {
super(context, attr);
init();
}
public CustomPhotoView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle);
init();
}
private void init() {
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
final int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = event.getX();
final float y = event.getY();
mLastTouchX = x;
mLastTouchY = y;
mActivePointerId = event.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = event.findPointerIndex(mActivePointerId);
final float x = event.getX(pointerIndex);
final float y = event.getY(pointerIndex);
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mLastTouchX = x;
mLastTouchY = y;
// 上下滑动的阈值
final int SCROLL_THRESHOLD = 10;
if (Math.abs(dy) > SCROLL_THRESHOLD) {
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = event.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = event.getX(newPointerIndex);
mLastTouchY = event.getY(newPointerIndex);
mActivePointerId = event.getPointerId(newPointerIndex);
}
break;
}
}
return false;
}
});
}
}
```
这样,你就可以使用自定义的PhotoView来支持上下滑动和视频播放了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)