我这里是实现banner自动播放,需要实现viewpager自动轮播,并且触摸时自动暂停播放。播放的照片可以缩放。
效果图:

网上错误的解决方法:
1、给viewpager直接设置setOnTouchListener监听,测试不行。不能监测到ACTION_DOWN事件,失败。
2、给viewpager页面的imageview设置setOnTouchListener监听,测试不行,由于我的是采用的第三方可拖拽缩放的com.bm.library.PhotoView控件,本身有触摸等功能,不好改。
3、我现在可行的方案:重写viewpager,把dispatchTouchEvent中的ACTION_DOWN和ACTION_UP事件不拦截,回调出来。
代码如下:
public class ImageDetailViewpager extends ViewPager {
public ImageDetailViewpager(@NonNull Context context) {
super(context);
}
public ImageDetailViewpager(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
if (listener != null) {
listener.onTouchDown();
}
break;
case MotionEvent.ACTION_UP:
if (listener != null) {
listener.onTouchUp();
}
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
private OnViewPagerTouchEvent listener;
public void setOnViewPagerTouchEventListener(OnViewPagerTouchEvent l){
listener = l;
}
public interface OnViewPagerTouchEvent{
void onTouchDown();
void onTouchUp();
}
}
网友评论