在我的 Android 应用程序中,我使用 viewpager 进行图像滑动。我的要求是,如果用户滑出第一页和最后一页,则活动应该完成。
我已经采取了这个example。但方法setOnSwipeOutListener
在我的活动中没有被调用。
这是我的自定义视图寻呼机类:
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
float mStartDragX;
OnSwipeOutListener mListener;
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 {
public void onSwipeOutAtStart();
public void onSwipeOutAtEnd();
}
}
在我的活动课下面,我称之为setOnSwipeOutListener
我的自定义 viewpager 类上的方法,但它没有被调用。
myPager = (CustomViewPager) findViewById(R.id.home_pannels_pager);
.......
myPager.setOnSwipeOutListener(new OnSwipeOutListener() { // the method never called
@Override
public void onSwipeOutAtStart() {
Log.e("swipe Out At Start ", "swipe out");
}
@Override
public void onSwipeOutAtEnd() {
Log.e("swipe Out At End ", "swipe end");
}
});
myPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int po) {
Log.e("positon", ""+po);
}
});
请帮助我检测用户是否已滑过第一页和最后一页以关闭此活动以及如何从代码中调用该方法。
就我而言,onInterceptTouchEvent 不起作用。我用 onTouchEvent 更改了方法,它正在工作。原来的解决方案来自tjlian616
@Override
public boolean onTouchEvent(MotionEvent ev){
if(getCurrentItem()==getAdapter().getCount()-1){
final int action = ev.getAction();
float x = ev.getX();
switch(action & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
if (x<mStartDragX){
mListener.onSwipeOutAtEnd();
}else{
mStartDragX = 0;
}
break;
}
}else{
mStartDragX=0;
}
return super.onTouchEvent(ev);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)