我怎么能返回图像内部的屏幕,如果是在屏幕外使用onTouch?



我有一个图像,该图像可以通过触摸来移动。一切正常,但我想让这个图像不能在屏幕外。这是我的尝试:

@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.layout_foreground_image_view_533) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
return true;
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (v.getX() < 0)
v.setX(0);
else if (v.getX() + v.getWidth() > displayMetrics.widthPixels)
v.setX(displayMetrics.widthPixels - v.getWidth());
else
v.setX(event.getRawX() - (float) v.getWidth() / 2);
return true;
}
}
return false;
}

代码将检查图像是否小于0并将其返回0。但是我希望图像永远不能在屏幕外,因为如果你尝试代码,你会注意到有振动。

已解决

@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.layout_foreground_image_view_533) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
return true;
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
//For Width
if (event.getRawX() - (float) v.getWidth() / 2 < 0)
v.setX(0);
else if (event.getRawX() + (float) v.getWidth() / 2 > displayMetrics.widthPixels)
v.setX(displayMetrics.widthPixels - v.getWidth());
else
v.setX(event.getRawX() - (float) v.getWidth() / 2);
//For Height
if (event.getRawY() - (float) v.getHeight() / 2 < 0)
v.setY(0);
else if (event.getRawY() + (float) v.getHeight() / 2 > displayMetrics.heightPixels)
v.setY(displayMetrics.heightPixels - v.getHeight());
else
v.setY(event.getRawY() - (float) v.getHeight() / 2);
return true;
}
}
return false;
}

最新更新