您的位置:首页 > 移动开发 > Android开发

天天记录 - Android 使用view.ScrollBy实现View随手指移动

2012-11-12 22:34 549 查看
     这篇文章的原标题是《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?

明天接着分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: