buttonをドラッグして境界を出ない
3171 ワード
ネットで調べたドラッグbuttonのコードを改善しました.の
画面を超えることはありません.
注釈の点に注意
画面を超えることはありません.
DisplayMetrics dm = getResources().getDisplayMetrics();
final int screenWidth = dm.widthPixels;
final int screenHeight = dm.heightPixels - 50;
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn);
btn.setOnTouchListener(new View.OnTouchListener() {
int[] temp = new int[]{0, 0};
public boolean onTouch(View v, MotionEvent event) {
int eventaction = event.getAction();
//getRawX()--> x
int x = (int) event.getRawX();
//getRawY()--> y , (50), getRawY() 50
int y = (int) event.getRawY();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
//getX()--> x , x ,
// getY(), (50 ),
temp[0] = (int) event.getX();
temp[1] = y - v.getTop();
Log.d(TAG, "x->" + x + ", y->" + y + ", v.getTop()->" + v.getTop());
Log.d(TAG, "temp[0]->" + temp[0] + ", temp[1]->" + temp[1]);
break;
case MotionEvent.ACTION_MOVE:
int ll = x - temp[0];
int tt = y - temp[1];
int rr = x + v.getWidth() - temp[0];
int bb = y - temp[1] + v.getHeight();
Log.i(TAG, "ll->" + ll + ", rr->" + rr + ", tt->" + tt + ", bb->" + bb + ", temp[0]->" + temp[0] + ", temp[1]->" + temp[1]);
if (ll < 0) {
ll = 0;
rr = v.getWidth();
}
if (rr > screenWidth) {
rr = screenWidth;
ll = rr - v.getWidth();
}
if (tt < 0) {
tt = 0;
bb = v.getHeight();
}
if (bb > screenHeight) {
bb = screenHeight;
tt = bb - v.getHeight();
}
v.layout(ll, tt, rr, bb);
Log.d(TAG, "ll->" + ll + ", rr->" + rr + ", tt->" + tt + ", bb->" + bb + ", temp[0]->" + temp[0] + ", temp[1]->" + temp[1]);
v.postInvalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
注釈の点に注意