示例——拖动控件

本文讲解两个示例,控件跟随手指移动

示例一:

    private int lastX;
    private int lastY;
    //布局底部导航栏高度
    private int mNavigationHeight;
    //手机底部导航栏高度
    private int mNavBarHeight;
    //手机屏幕高度
    private int mScreenHeight;
    //手机屏幕宽度
    private int mScreenWidth;

 bindId(R.id.ctl_suspend_play).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int x = (int) event.getRawX();
                int y = (int) event.getRawY();
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE: {
                        int left = (int) v.getX() + x - lastX;
                        int top = (int) v.getY() + y - lastY;
                        if (top + v.getHeight() >= mScreenHeight - mNavigationHeight - mNavBarHeight) {
                            top = mScreenHeight - mNavigationHeight - mNavBarHeight - v.getHeight();
                        } else if (top <= 0) top = 0;

                        if (left + v.getWidth() >= mScreenWidth) {
                            left = mScreenWidth - v.getWidth();
                        } else if (left <= 0) left = 0;

                        v.setX(left);
                        v.setY(top);
                        break;
                    }
                }

                lastX = x;
                lastY = y;
                return true;
            }
        });

示例二:

    //按下时的Y
    private int mPressY;
    //按下时的X
    private int mPressX;
    //当前移动的Y
    private int mMoveY;
    //当前移动的X
    private int mMoveX;
    //布局底部导航栏高度
    private int mNavigationHeight;
    //手机底部导航栏高度
    private int mNavBarHeight;
    //手机屏幕高度
    private int mScreenHeight;
    //手机屏幕宽度
    private int mScreenWidth;

       bindId(R.id.ctl_suspend_play).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        mPressY = (int) event.getRawY();
                        mPressX = (int) event.getRawX();
                        mMoveY = (int) v.getY();
                        mMoveX = (int) v.getX();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getRawX();
                        int y = (int) event.getRawY();
                        int vHeight = v.getHeight();
                        int vWidth = v.getWidth();
                        if (y > mPressY) {
                            int add = y - mPressY;
                            mMoveY += add;
                            if (mMoveY + vHeight >= mScreenHeight - mNavigationHeight - mNavBarHeight) {
                                mMoveY = mScreenHeight - mNavigationHeight - mNavBarHeight - vHeight;
                            }
                        } else {
                            int sub = mPressY - y;
                            mMoveY -= sub;
                            if (mMoveY < 0) mMoveY = 0;
                        }

                        if (x > mPressX) {
                            int add = x - mPressX;
                            mMoveX += add;
                            if (mMoveX + vWidth >= mScreenWidth) {
                                mMoveX = mScreenWidth - vWidth;
                            }
                        } else {
                            int sub = mPressX - x;
                            mMoveX -= sub;
                            if (mMoveX < 0) mMoveX = 0;
                        }
                        v.setX(mMoveX);
                        v.setY(mMoveY);
                        mPressY = y;
                        mPressX = x;
                        break;
                }

                return true;
            }
        });
发布了213 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a1003434346/article/details/103040681