天天记录 - Android 使用view.ScrollBy实现View随手指移动
2012-11-12 22:34
549 查看
这篇文章的原标题是《Android 使用scroller实现View随手指移动》 真是大错特错, Scroller仅仅是一个辅助类用于根据滚动速度获取每次的偏移量而已。
例子下载地址, 伪码如下:
为什么x,y两个值没有改变,而scrollX和scrollY改变了?
Android的视图绘制仅针对与应用开发来说,通常经过三个步骤:
1. onMeasure 测量出所有视图的大小
2. onLayout 根据测量的值,指定视图在屏幕上的位置
3. onDraw 根据视图大小和位置,具体在屏幕上进行渲染操作,即画到屏幕上
个人看法:提高效率
在onMeasure,onLayout,onDraw回调方法中都添加log输出,当视图随手指移动的制定仅执行onDraw方法,也就是与x,y之被改变不同不会执行前两个回调。
绘制的三个步骤仅需要执行最后一个,肯定效率高于直接修改x,y值。
一 有图有真相,先上图和例子
例子下载地址, 伪码如下:
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?
明天接着分析相关文章推荐
- Android-通过自定义View组件实现跟随手指移动的ImageView组件
- Android开发——自定义View之实现跟随手指移动的小球
- 天天记录 - Android 使用Canvas Transalte方法控制视图移动
- Android自实现activity之间切换,view随手指移动
- Android最简单的实现View拖拽跟随手指移动效果
- 基于Android实现随手指移动的ImageView
- Android实现View拖拽跟随手指移动效果
- Android 实例:通过自定义View组件实现跟随手指移动的小兔子
- Android自定义圆形View实现小球跟随手指移动效果
- Android中Recyclerview使用13----实现瀑布流遇到的各种问题(item移动,加载更多图片闪烁,以及定制各种类型Header和Footer)
- android 利用ViewDragHelper实现childView可随手指移动的自定义ViewGroup
- Android 仿美团网,探索使用ViewPager+GridView实现左右滑动查看更多分类的功能
- Android记录24-WebView实现白天/夜间阅读模式
- 使用ViewPager实现android软件使用向导的功能
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android使用wheelView实现简单类似ios PickerView选择器效果
- Android照片墙加强版,使用ViewPager实现画廊效果
- Android入门(33)——第十章 使用ViewPager实现导航
- 记录Android开发中使用HorizontalScrollView的坑
- Android 中使用 RecyclerView + SnapHelper 实现类似 ViewPager 效果