android 可移动控件
android 可移动控件
/**
* 用于判断view的移动
* @param view
* @param event
* @return
*/
@Override
public boolean onTouch(View view, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
if(lParams.leftMargin<0){//判断控件是否半隐藏状态
lParams.leftMargin = 0;
}else if(lParams.topMargin<0){
lParams.topMargin=0;
}else if(X -_xDelta> screenWidth - width){
lParams.leftMargin = screenWidth-width;
}
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
StartX = X;
StartY = Y;
// Log.e(TAG,"_xDelta "+_xDelta+" _yDelta "+_yDelta+" lParams.rightMargin "+lParams.rightMargin);
break;
case MotionEvent.ACTION_UP:
//关键部分:移动距离较小,视为onclick点击行为
if (Math.abs(X - StartX) < 1.5 && Math.abs(Y - StartY) < 1.5){//计算器弹出
//这放点击后的逻辑代码
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
// RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
// .getLayoutParams();
if(X - _xDelta<0 - width/2){
lParams.leftMargin = 0- width/2;
}else if(X -_xDelta> screenWidth - width/2){
lParams.leftMargin = screenWidth - width/2;
}else{
lParams.leftMargin = X - _xDelta;
}
if(Y - _yDelta<0 - height/2){
lParams.topMargin = 0 - height/2;
}else if(Y -_yDelta > screenHeight - height-NavigationBarheight){
lParams.topMargin = screenHeight - height-NavigationBarheight;
}else{
lParams.topMargin = Y - _yDelta;
}
lParams.rightMargin = -250;
lParams.bottomMargin = -250;
view.setLayoutParams(lParams);
break;
}
background.invalidate();
return true;
}