实现一个跟手滑动的效果,这一定是个自定义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等方法。
效果如下。
注:以上内容摘自《Android 开发艺术探索》 —— 任玉刚
此篇仅作笔记使用。