在做一个自定义view 跟随滑动而滑动的效果,拖动的效果有几种实现形式,接下来浅谈下各个实现形式。
1.onLayout
layout 方法是布局的意思,当拖动的获取当前的坐标,然后通过layout 来实时布局view的位置。
public void onTouchEvent(MotionEvent event){
int x = event.getX();
int y = event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
lastx = x;
lasty = y;
break;
case MotionEvent.ACTION_MOVE:
int offsetX = x-lastx;
int offsetY = y-lasty;
layout(getLeft+offsetx,getTop()+offsety,getRight()+offsetx,getBottom()+offsetY);
break;
}
}
2.offsetLeftAndRight() offsetTopAndBottom()
通过方法名称可以得知,设置上下方向的偏移量。
case MotionEvent.ACTION_MOVE:
int offsetX = x-lastx;
int offsetY = y-lasty;
offsetLeftAndRight(offsetX) ;
offsetTopAndBottom(offsetY)
break;
3.layoutPrams 布局参数
case MotionEvent.ACTION_MOVE:
int offsetX = x-lastx;
int offsetY = y-lasty;
LinearLayout.LayoutParams layoutParams = (Linearlayout.LayoutParams)getlayoutParams();
layoutParams.leftMargin = getLeft()+offsetX;
layoutParams.topMargin = getTop()+offsetY;
setLayoutParams(layoutParams);
break;
4. scrollTo scrollBy
scrollTo (x,y) 移动到具体某个点
scrollBy(x,y) 移动多少距离,是偏移的意思。scrollby是控件内容滑动,不是控件本身滑动。此处不好理解。也因为这个原因,所以和正常的偏移正好相反。
是控件本身相对于控件内容偏移。结合图片理解。