欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓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像素
相关标签: view滑动