Android开发艺术探索笔记-自定义View-跟手滑动

实现一个跟手滑动的效果,这一定是个自定义View,拖动它可以让它在整个屏幕上随意滑动。这个View实现起来很简单,我们只要重写它的onTouchEvent方法并处理ACTION_MOVE事件,根据两次滑动之间的距离就可以实现它的滑动了。为了实现全屏滑动,此采用动画的方式来实现。核心代码如下所示。

public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getRawX();
        int y = (int) event.getRawY();
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                int deltaX = x - mLastX;
                int deltaY = y - mLastY;
                int translationX = (int) (ViewHelper.getTranslationX(this) + deltaX);
                int translationY = (int) (ViewHelper.getTranslationY(this) + deltaY);
                ViewHelper.setTranslationX(this,translationX);
                ViewHelper.setTranslationY(this,translationY);
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                break;
        }
        mLastX = x;
        mLastY = y;
        return true;
    }

通过上述代码可以看出,这一全屏滑动的效果实现起来相当简单。首先我们通过getRawX和getRawY方法来获取手指当前的坐标,注意不能用getX和getY方法,因为这个是要全屏滑动的,所以需要获取当前点击事件再屏幕中的坐标而不是相对于位移,View本身的坐标;其次,我们要得到两次滑动之间的位移,
有了这个位移就可以移动当前的View,移动方法采用的是动画兼容库 nineoldandroids 中的 ViewHelper 类所提供的 setTranslationX 和setTranslationY 方法。实际上,ViewHelper 类提供了一系列 get/set方法,因为 View 的 setTrainslationX 和 setTranslationY 只能在 Android3.0 及以上版本才能使用,但是ViewHelper所提供的方法是没有版本要求的,与此类似的还有 setX、setScaleX、setAlpha等方法。

效果如下。

QQ20170320-160636.gif

注:以上内容摘自《Android 开发艺术探索》 —— 任玉刚
此篇仅作笔记使用。

你可能感兴趣的:(Android开发艺术探索笔记-自定义View-跟手滑动)