Android控件的拖动

来源:互联网 发布:lol骚男的淘宝店网址 编辑:程序博客网 时间:2024/05/17 05:05

Android控件的拖动,主要是通过设置控件的setOnTouchListener()方法,重写它的onTouch()方法。然后通过MotionEvent的不同事件,进行判断,主要是在MotionEvent.ACTION_MOVE中不断重绘控件在画布中的位置,而实现拖动的效果。

  

public class DragViewActivity extends AppCompatActivity {    private Button btn_drag;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_drag_view);        // 获取屏幕的宽高        DisplayMetrics dm = getResources().getDisplayMetrics();        final int screenWith = dm.widthPixels;        final int screenHeight = dm.heightPixels;        btn_drag = (Button) findViewById(R.id.btn_drag);        btn_drag.setOnTouchListener(new View.OnTouchListener() {                int lastX;                int lastY;                boolean isDraging = false;            @Override            public boolean onTouch(View v, MotionEvent event) {                int ee = event.getAction();                switch (ee){                    case MotionEvent.ACTION_DOWN:                        isDraging = true;                        lastX = (int) event.getRawX();                        lastY = (int) event.getRawY();                        break;                    case MotionEvent.ACTION_MOVE:                        if (isDraging){                            // x轴方向的位移差                            int dx = (int) event.getRawX() - lastX;                            //  y轴方向的位移差                            int dy = (int) event.getRawY() - lastY;                            int l = v.getLeft() + dx;                            int t = v.getTop() + dy;                            int r = v.getRight() + dx;                            int b = v.getBottom() + dy;                            // 判断超出屏幕                            if (l < 0){                                l = 0;                                r = l + v.getWidth();                            }                            if (t < 0){                                t = 0;                                b = t + v.getHeight();                            }                            if (r > screenWith){                                r = screenWith;                                l = r - v.getWidth();                            }                            if (b > screenHeight){                                b = screenHeight;                                t = b - v.getHeight();                            }                            // 重绘view                            v.layout(l, t, r, b);                            v.postInvalidate();                            lastX = (int) event.getRawX();                            lastY = (int) event.getRawY();                        }                        break;                    case  MotionEvent.ACTION_UP:                        isDraging = false;                        break;                    default:                        break;                }                return false;            }        });    }

0 0
原创粉丝点击