一个简易的右滑返回

ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.content);

这个代码大家很熟悉,setContentView的目标就是这个viewGroup,我所做的右滑返回就是基于这个基础知识的,获取到这个根viewGroup以后,我们可以进行如下操作

View child = new View(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20,LinearLayout.LayoutParams.MATCH_PARENT);
child.setLayoutParams(params);
viewGroup.addView(child);

这一步操作意义也很简单,创建一个宽为20px,高度充满整个屏幕的子view,将其加入根viewGroup,因为我们做的是右滑返回,所以并不需要设置view的gravity,如果我们做的是左滑返回,可以如下设置

params.gravity = Gravity.RIGHT;

然后,对子view进行设置触摸监听,如下

child.setOnTouchListener(new OnTouchListener() {

        private float dx;

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    dx = event.getX();
                }
                break;
                case MotionEvent.ACTION_MOVE: {
                    if (Math.abs(event.getX() - dx) > 5) {
                        finish();
                        return true;
                    }
                    dx = event.getX();
                }

                break;
                case MotionEvent.ACTION_UP:

                    break;
                default:
                    break;
            }

            return true;
        }
    });

代码很简单,获取按下时候的dx值,在MOVE的时候和当前的dx进行比较,此处为了简单直接去了减法的绝对值,如果你为了精确一点,可以通过判断一下正负来知道是左滑还是又滑进行区分,同时我们操作也很简单,就是直接finish()了,其实你完全可以写一个接口,通过外部设置的方式来自由决定你触摸时候的操作,同样的道理,这个view的宽高啊,位置啊,都可以进行自由发挥,以上,就是一个简单的右滑返回了,左滑返回同样的道理,大家可以自行拓展一下。

你可能感兴趣的:(android)