理解在computeScroll里scrollTo和设置Scroller的startScroll

来源:互联网 发布:无线端有美工作图 编辑:程序博客网 时间:2024/05/01 20:37
import android.content.Context;import android.util.AttributeSet;import android.widget.LinearLayout;import android.widget.Scroller;public class SlideLinearLayout extends LinearLayout {private boolean ishow = false;private Scroller mScroller = null;private int distance;public SlideLinearLayout(Context context, AttributeSet attrs) {super(context, attrs);mScroller = new Scroller(context);// TODO Auto-generated constructor stub}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) {if (ishow) {scrollTo(mScroller.getCurrX(), 0);} else {scrollTo(mScroller.getCurrX() - distance, 0);}postInvalidate();}}public void beginScroll(Boolean isShow, int odistance,int duration) {distance=odistance;if (!ishow) {mScroller.startScroll(0, 0, -distance, 0, duration);ishow = true;} else {mScroller.startScroll(0, 0, distance, 0, duration);ishow = false;}invalidate();}public boolean Ishow() {return ishow;}}

代码依据:

一,屏幕的左上角是坐标系统原点(0,0)

原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向
1,MotionEvent类中:
event.getRowX():触摸点相对于屏幕原点的X坐标
event.getX():   触摸点相对于其所在组件原点的X坐标
event.getRowY():触摸点相对于屏幕原点的Y坐标
event.getY():   触摸点相对于其所在组件原点的Y坐标
2,Scroller类中:
getScrollY():相对于“坐标系统原点”(见上图)在Y轴上的偏移量
getScrollX():相对于“坐标系统原点”(见上图)在X轴上的偏移量
3,View类中:
getScrollY():相对于“坐标系统原点”(见上图)在Y轴上的偏移量

getScrollX():相对于“坐标系统原点”(见上图)在X轴上的偏移量


二,computeScroll:主要功能是计算拖动的位移量、更新背景、设置要显示的屏幕
在computeScroll()中获取滚动情况,做出滚动的响应

computeScroll在父控件执行drawChild时调用


三,startScroll
提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。
参数
 startX 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动
 startY 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动
 dx 水平方向滑动的距离,正值会使滚动向左滚动
 dy 垂直方向滑动的距离,正值会使滚动向上滚动

0 1
原创粉丝点击