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在父控件执行drawChild时调用
提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。
参数
startX 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动
startY 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动
dx 水平方向滑动的距离,正值会使滚动向左滚动
dy 垂直方向滑动的距离,正值会使滚动向上滚动