view 移动 不超过 边缘

下面是一个拖动view时 view不会超出屏幕,即view不会被盖住的小例子
public class DragButtonActivity extends Activity implements OnTouchListener {
/** Called when the activity is first created. */
int[] temp = new int[] { 0, 0 };
int display_x, display_y = 800;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final Button btn = (Button) findViewById(R.id.btn);
display_x = getWindowManager().getDefaultDisplay().getWidth();
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
v.measure(0, 0);
display_y = v.getMeasuredHeight();
showLog("display_y = " + display_y);
btn.setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
int eventaction = event.getAction();
// Log.i("touch", "onTouchEvent:" + eventaction);
int x = (int) event.getRawX();
int y = (int) event.getRawY();
int w = v.getWidth(), h = v.getHeight();
switch (eventaction) {
case MotionEvent.ACTION_DOWN: // touch down so check if the
temp[0] = (int) event.getX();
temp[1] = (int) (y - v.getTop());
showLog("y = " + y + "; v.getTop() " + v.getTop()
+ "; (y - v.getTop()) = " + (y - v.getTop())
+ "; event.getY() = " + event.getY());
display_y = getWindow().findViewById(Window.ID_ANDROID_CONTENT)
.getHeight();
showLog("display_y = " + display_y);
break;

case MotionEvent.ACTION_MOVE: // touch drag with the ball
int l = (x - temp[0] <= 0) ? 0
: ((x - temp[0] + w > display_x) ? (display_x - w)
: (x - temp[0]));
int r = (l + w);

int t = (y - temp[1] <= 0) ? 0
: ((y - temp[1] + h > display_y) ? (display_y - h)
: (y - temp[1]));
int b = t + h;
v.layout(l, t, r, b);
v.postInvalidate();
break;

case MotionEvent.ACTION_UP:

break;
}

return false;
}

void showLog(String content) {
Log.i("touch", "------------------------:" + content);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值