Android滑动返回上一级界面

原创
2016/12/01 13:03
阅读数 371

自定义Activity布局的root控件,拦截触摸事件并拦截

 

拦截触摸事件函数onInterceptTouchEvent

event.getAction() == MotionEvent.ACTION_DOWN  return true;Move Up 事件不再传递

父控件的onTouchEvent函数处理所有的滑动事件

注意一点onTouchEvent函数中event.getAction() == MotionEvent.ACTION_DOWN return true;这里如果返回false的,事件直接结束,Move Up事件不再传递。

public class SwipeBackFrameLayout extends FrameLayout {
    float eventX;
    private String TAG = SwipeBackFrameLayout.class.getName();

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

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                Log.d(TAG, "MotionEvent.ACTION_DOWN");
                float eventX = event.getX();
                if (eventX < 55) {
                    return true;
                }
                break;
            }
        }
        return super.onInterceptTouchEvent(event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                Log.d(TAG, "MotionEvent.ACTION_DOWN");
                eventX = event.getX();
                return true;
            }
            case MotionEvent.ACTION_MOVE: {
                Log.d(TAG, "MotionEvent.ACTION_MOVE");
                float eventXM = event.getX();
                float differenceXM = eventXM - eventX;
                if (differenceXM > 30) {
                    ((Activity) getContext()).finish();
                }
                return true;
            }
            case MotionEvent.ACTION_UP: {
                Log.d(TAG, "MotionEvent.ACTION_UP");
                return true;
            }

        }
        return super.onTouchEvent(event);
    }
}
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部