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

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
	}

	@Override
	public 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 垂直方向滑动的距离,正值会使滚动向上滚动

你可能感兴趣的:(android)