这篇文章的原标题是《Android 使用scroller实现View随手指移动》 真是大错特错, Scroller仅仅是一个辅助类用于根据滚动速度获取每次的偏移量而已。


一 有图有真相,先上图和例子



例子下载地址, 伪码如下:


public class CustomLinearLayout extends LinearLayout {            private int mLastX;      private int mLastY;            ......            @Override      public boolean onTouchEvent(MotionEvent event) {            final int action = event.getAction();            final int x = (int) event.getX();          final int y = (int) event.getY();            switch (action) {          case MotionEvent.ACTION_DOWN:                mLastX = x;              mLastY = y;                break;            case MotionEvent.ACTION_MOVE:                            updateLog();                            int deltaX = mLastX - x;              int deltaY = mLastY - y;                // 把视图移动到当前的相应偏移位置。             scrollBy(deltaX, deltaY);                mLastX = x;              mLastY = y;                break;            default:              break;          }            // 不再传递Touch事件          return true;      }            ......  }


二 由例子引发的疑问?

解释:此例子中的x,y值其实是view.getLeft 和 view.getTop
为什么x,y两个值没有改变,而scrollX和scrollY改变了?

Android的视图绘制仅针对与应用开发来说,通常经过三个步骤: 1. onMeasure 测量出所有视图的大小 2. onLayout 根据测量的值,指定视图在屏幕上的位置 3. onDraw 根据视图大小和位置,具体在屏幕上进行渲染操作,即画到屏幕上

个人看法: 提高效率 在onMeasure,onLayout,onDraw回调方法中都添加log输出,当视图随手指移动的制定仅执行onDraw方法,也就是与x,y之被改变不同不会执行前两个回调。 绘制的三个步骤仅需要执行最后一个,肯定效率高于直接修改x,y值。

三 为什么仅执行onDraw?


明天接着分析



更多相关文章

  1. Android(安卓)- View的绘制流程二(layout)
  2. [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888
  3. Android(安卓)linux的休眠和唤醒
  4. Android事件分发机制——View(一)
  5. android webview用法小结1
  6. Android图形系统(十三)-Vsync信号处理
  7. Macaca环境搭建(Android(安卓)+ Mac)
  8. Android(安卓)自定义View 例子一
  9. [Android(安卓)Pro] Android中全局Application的onCreate多次调

随机推荐

  1. android Linearlayout中有关gravity与lay
  2. 笔记 RelativeLayout:相对布局管理器:
  3. Android平台开发-Android(安卓)keypad ma
  4. Android单元测试之Local unit tests(下)
  5. Android内存管理、监测剖析
  6. android开发每日汇总【2011-12-6】
  7. android:visibility属性
  8. running Android(安卓)Studio on Windows
  9. EditText 的常用属性与解释
  10. android 使用Intent传递数据之剪切板