Android的viewpager检测轻扫登天 [英] Android viewpager detect swipe beyond the bounds
问题描述
在我的Android应用程序是用来看的寻呼机的图像刷卡。我的要求是,如果用户刷卡出第一页和最后一页的活动应该结束了。
In my Android application am using view pager for images swiping. my requirement is if user swipe out of the first and last page the activity should be finished.
我已经采取了这个例子从下面的<一个href="http://stackoverflow.com/questions/13346824/viewpager-detect-when-user-is-trying-to-swipe-out-of-bounds">here.但该方法 setOnSwipeOutListener
不叫我的活动
I have taken this example from the following the here. But the method "setOnSwipeOutListener
" is not called in my activity
这是我的自定义视图寻呼机类。
this is my custom view pager class.
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();
}
}
和我的活动在这里I类称为自定义视图寻呼机类setOnSwipeOutListener方法,但它不叫。
and its my activity class here I called setOnSwipeOutListener method of custom view pager class but its does not called.
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);
}
});
请帮我检测,如果超出了第一页和最后一页刷卡用户刷卡从code关闭此活动,以及如何让调用该方法。
please help me to detect if user swipe beyond first and last page swipe to close this activity and how to get call the method from the code.
推荐答案
在我的情况下,onInterceptTouchEvent不起作用。我改变方法的onTouchEvent并且工作。原始溶液是从<一个href="http://stackoverflow.com/questions/13346824/viewpager-detect-when-user-is-trying-to-swipe-out-of-bounds/13347008#13347008">tjlian616
In my case, onInterceptTouchEvent does not work. I change the method with onTouchEvent and it is working. The original solution is from 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);
}
这篇关于Android的viewpager检测轻扫登天的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!