安卓View的滑动(scrollTo/scrollBy,layout,动画)
程序员文章站
2022-03-02 21:10:31
...
通过scrollTo,ScrollBy
public class DragView extends View {
public DragView(Context context) {
super(context);
}
public DragView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public DragView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context){
}
private int startX;
private int startY;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x= (int) event.getX();
int y= (int) event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
startX=x;
startY=y;
break;
case MotionEvent.ACTION_MOVE:
int distanceX=x-startX;//末位置-初始位置
int distanceY=y-startY;
((View)getParent()).scrollBy(-distanceX,-distanceY);
break;
case MotionEvent.ACTION_POINTER_UP:
break;
}
return true;
}
}
通过layout()
public class LayoutView extends View{
public LayoutView(Context context) {
super(context);
}
public LayoutView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public LayoutView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private int startX;
private int startY;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x= (int) event.getX();
int y= (int) event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
startX=x;
startY=y;
break;
case MotionEvent.ACTION_MOVE:
int distanceX=x-startY;
int distanceY=y-startY;
/**
layout()中的方法
getTop()获取到的是View自身顶边到父布局顶边的距离
getBottom()获取到的是View自身底边到父布局顶边的距离
getLeft()获取到的是View自身左边到父布局左边的距离
getRight()获取到的是View自身右边到父布局左边的距离
*/
layout(
getLeft()+distanceX,
getTop()+distanceY,
getRight()+distanceX,
getBottom()+distanceY
);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
动画
ObjectAnimator.ofFloat(button,"translationX",0,100).setDuration(1000).start();//设置一秒内向右移动100像素
上一篇: java读取jar包中的文件
下一篇: 关于排序那些事