gpt4 book ai didi

android - 在自定义 ViewPager 的 onInterceptTouchEvent 中计算阈值

转载 作者:行者123 更新时间:2023-11-30 02:02:46 29 4
gpt4 key购买 nike

我正在构建一个漫画/日本漫画应用程序,它有一个包含 viewpager 的 Activity 以显示每章中的图像。我希望 ViewPager 在用户在第一页/最后一页滑出边界时开始新的章节。为此,我通过使用自定义 ViewPager 并覆盖 onInterceptTouchEvent

找到了解决方案
public class CustomViewPager extends ViewPager {

float mStartDragX;
OnSwipeOutListener mListener;

public CustomViewPager(Context context) {
super(context);
}

public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mListener = listener;
}


@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
if (mStartDragX < x && getCurrentItem() == 0) {
mListener.onSwipeOutAtStart();
} else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
mListener.onSwipeOutAtEnd();
}
break;
}
return super.onInterceptTouchEvent(ev);
}

public interface OnSwipeOutListener {
void onSwipeOutAtStart();
void onSwipeOutAtEnd();
}

}

这种方法在一定程度上是有效的。问题是,我的 ViewPager 使用 TouchImageView 允许缩放图像,如果我在第一页/最后一页使用此功能,那么任何拖动移动(最轻微的事件)都会触发 onSwipeOutAtStartonSwipeOutAtEnd。如何自定义阈值以仅在超出屏幕尺寸的一半或三分之一时触发相应的方法?或者更好的是,在缩放图像时禁用这些方法?感谢您的帮助。

最佳答案

似乎我已经找到了如何在 TouchImageView 缩放时禁用 OnSwipeOutListener。首先将标签分配给 PagerAdapter

instantiateItem 中的父 View
layout.setTag(position);

我已经将标签设置为页面的位置。然后将 MotionEvent.ACTION_MOVE 更改为:

case MotionEvent.ACTION_MOVE:
if (mStartDragX < x && getCurrentItem() == 0) {
View view = findViewWithTag(0);
if (view != null) {
TouchImageView img = (TouchImageView) view.findViewById(R.id.img);
if (!img.isZoomed()) {
mListener.onSwipeOutAtStart();
}
}
} else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
View view = findViewWithTag(getAdapter().getCount() - 1);
if (view != null) {
TouchImageView img = (TouchImageView) view.findViewById(R.id.img);
if (!img.isZoomed()) {
mListener.onSwipeOutAtEnd();
}
}
}
break;

不确定这种方法是否正确,但它确实有效。关于刷卡阈值,我还没找到解决办法。

关于android - 在自定义 ViewPager 的 onInterceptTouchEvent 中计算阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31226562/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com