关于Android中View滑动知识的一点个人理解

来源:互联网 发布:java int 除法取整 编辑:程序博客网 时间:2024/05/17 01:49

     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);}@Overridepublic 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;}}         

1 0