android控件跟随手势滑动改变位置

来源:互联网 发布:中日联谊医院网络挂号 编辑:程序博客网 时间:2024/06/05 03:48
    private View.OnTouchListener shopCarSettleTouch = new View.OnTouchListener() {        int lastX, lastY;        @Override        public boolean onTouch(View v, MotionEvent event) {            int ea = event.getAction();            DisplayMetrics dm = getResources().getDisplayMetrics();            int screenWidth = dm.widthPixels;//            int screenHeight = dm.heightPixels - 100;//需要减掉图片的高度            int screenHeight = dm.heightPixels;//需要减掉图片的高度            switch (ea) {                case MotionEvent.ACTION_DOWN:                    lastX = (int) event.getRawX();//获取触摸事件触摸位置的原始X坐标                    lastY = (int) event.getRawY();                case MotionEvent.ACTION_MOVE:                    //event.getRawX();获得移动的位置                    int dx = (int) event.getRawX() - lastX;                    int dy = (int) event.getRawY() - lastY;                    int l = v.getLeft() + dx;                    int b = v.getBottom() + dy;                    int r = v.getRight() + dx;                    int t = v.getTop() + dy;                    //下面判断移动是否超出屏幕                    if (l < 0) {                        l = 0;                        r = l + v.getWidth();                    }                    if (t < 0) {                        t = 0;                        b = t + v.getHeight();                    }                    if (r > screenWidth) {                        r = screenWidth;                        l = r - v.getWidth();                    }                    if (b > screenHeight) {                        b = screenHeight;                        t = b - v.getHeight();                    }                    v.layout(l, t, r, b);                    Log.e(TAG, "onTouch: " +l+"=="+t+"=="+r+"=="+b);                    lastX = (int) event.getRawX();                    lastY = (int) event.getRawY();                    v.postInvalidate();                    break;                case MotionEvent.ACTION_UP:                    break;            }            return true;        }

};

使用方法:

iv = (ImageView) findViewById(R.id.iv);iv.setOnTouchListener(shopCarSettleTouch);