您的位置:首页 > 其它

使控件可拖拽

2016-11-28 00:55 106 查看
/**
* 监听控件移动状态
* @param view 控件
*/
private void moveView(final View view) {
//获得整个屏幕的宽、高
WindowManager wWM = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
final int w = wWM.getDefaultDisplay().getWidth();
final int h = wWM.getDefaultDisplay().getHeight();
//监听
view.setOnTouchListener(new View.OnTouchListener() {
private int startX;
private int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {
//按下(执行1次)
case MotionEvent.ACTION_DOWN:
//手指按下时的那个坐标:离左边界、上边界的距离
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
//移动(执行N次)
case MotionEvent.ACTION_MOVE:
//1.手指滑动后那个坐标:距离左边界、上边界的距离
int moveX = (int) event.getRawX();
int moveY = (int) event.getRawY();
//2.滑动后-按下时=手指移动了多少距离(X、Y)
int moveLengthX = moveX - startX;
int moveLengthY = moveY - startY;
//3.算出移动了多少距离之后,
//就可以把控件当前所在位置的上下边+手指移动的Y距离;左右边+手指移动的X距离,这样移动后控件应该出现的位置就很明确了
int left = view.getLeft() + moveLengthX;
int top = view.getTop() + moveLengthY;
int right = view.getRight() + moveLengthX;
int bottom = view.getBottom() + moveLengthY;
//按个人需要增添:以下判断是防止控件被拖出屏幕(可以先不加然后看看效果)
if (bottom>h-70||left<0||top<0||right>w) {
//减70是减去手机最上面的状态栏的高度,不同手机状态栏高度不同,自己调节
return true;
}
//4.把控件定位到移动后的位置
view.layout(left, top, right, bottom);
//5.把这个位置又作为起始坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
//抬起(执行1次)
case MotionEvent.ACTION_UP:
//本次监听结束:如果你要做回显的话就把现在控件位置存进SharedPreferences偏好设置里,下次进界面时取出来,初始化控件到这个位置

break;
}
//如果只设置控件能拖拽就返回true,如果既设置拖拽又设置了点击事件就返回false
return true;
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  控件 移动 拖拽