Android的viewpager检测轻扫登天登天、Android、viewpager

2023-09-07 22:00:01 作者:心软是病,不治要命

在我的Andr​​oid应用程序是用来看的寻呼机的图像刷卡。我的要求是,如果用户刷卡出第一页和最后一页的活动应该结束了。

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.

我已经采取了这个例子从下面的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并且工作。原始溶液是从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);
}