首页 > 系统 > Android > 正文

Android控件拖动实例详解

2019-12-12 04:13:50
字体:
来源:转载
供稿:网友

Android控件拖动

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;       }     });   } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表