View是Android中重要性不亚于四大组件的存在。今天主要看看Android中关于View滑动的一些小知识点
View的滑动在Android中有三种方式: 1.使用scrollTo或 scrollBy;2.使用动画;3.改变布局参数(改变LayoutParams)
下面是一个随手指在屏幕上随意滑动的小例子(Android开发艺术探索 这本书上的):
其中有一些小的细节一直没有搞明白,今天看书的时候突然明白了,记下笔记:
代码如下:
public class MoveView extends TextView {
private int mLastX;
private int mLastY;
public MoveView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean isIntercept = false;
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
Log.e("rawX", String.valueOf(rawX));
Log.e("rawY", String.valueOf(rawY));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isIntercept = true;
break;
case MotionEvent.ACTION_MOVE:
int dx = rawX - mLastX;
int dy = rawY - mLastY;
Log.e("dX", String.valueOf(dx));
Log.e("dY", String.valueOf(dy));
Log.e("TranslationX", String.valueOf(getTranslationX()));
Log.e("TranslationY", String.valueOf(getTranslationY()));
int dx1 = (int) getTranslationX() + dx;
int dy1 = (int) getTranslationY() + dy;
setTranslationX(dx1);//此处改为dx下面改为dy后,是无法实现随手指滑动的,
setTranslationY(dy1);//具体原因是因为 dx与dy是当前相对于屏幕的坐标与前一次相对于屏幕的坐标之差
//而当手指从MoveView上滑动,这个dx与dy是有一个范围的,就是MoveView左上角坐标与MoveView右下角坐标之差(可能为正也可能为负);
//也就是说|dx|<=MoveView宽度 |dy|<=MoveView高度,所以改为dx及dy后,MoveView只能稍微在一个范围内移动,而无法实现全屏移动。
isIntercept = true;
break;
case MotionEvent.ACTION_UP:
isIntercept = false;
break;
default:
break;
}
mLastX = rawX;
mLastY = rawY;
return isIntercept;
}
}