Android ImageView拖拽定位
Android ImageView drag and drop positioning
这是我的代码
public class MainActivity extends Activity {
int screenWidth;
int screenHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
screenWidth = displaymetrics.widthPixels;
screenHeight = displaymetrics.heightPixels;
final ImageView img = (ImageView) findViewById(R.id.imageView1);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
LayoutParams layoutParams = (LayoutParams) img
.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
if (x_cord > screenWidth) {
x_cord = screenWidth;
}
if (y_cord > screenHeight) {
y_cord = screenHeight;
}
layoutParams.leftMargin = x_cord;
layoutParams.topMargin = y_cord;
img.setLayoutParams(layoutParams);
break;
default:
break;
}
return true;
}
});
}
}
但是当我 运行 我的应用程序并尝试拖放我的圆形图像时,圆形图像开始闪烁得非常大,它不能正常拖动。这是展示这一点的视频。
https://www.youtube.com/watch?v=sGtza5HKMOI
请解释我做错了什么。
提前致谢。
经过一点蛮力,我想出了这样的解决方案,也许对某些人有用。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int) event.getRawX();
int y_cord = (int) event.getRawY();
img.setX(x_cord - 150);
img.setY(y_cord - 230);
break;
default:
break;
}
return true;
}
数字150和230只是因为定位是从imageview的左上角开始的,我懒得确定实际的触摸位置within imageview和设置相对于该坐标的定位。 :)
这是我的代码
public class MainActivity extends Activity {
int screenWidth;
int screenHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
screenWidth = displaymetrics.widthPixels;
screenHeight = displaymetrics.heightPixels;
final ImageView img = (ImageView) findViewById(R.id.imageView1);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
LayoutParams layoutParams = (LayoutParams) img
.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
if (x_cord > screenWidth) {
x_cord = screenWidth;
}
if (y_cord > screenHeight) {
y_cord = screenHeight;
}
layoutParams.leftMargin = x_cord;
layoutParams.topMargin = y_cord;
img.setLayoutParams(layoutParams);
break;
default:
break;
}
return true;
}
});
}
}
但是当我 运行 我的应用程序并尝试拖放我的圆形图像时,圆形图像开始闪烁得非常大,它不能正常拖动。这是展示这一点的视频。
https://www.youtube.com/watch?v=sGtza5HKMOI
请解释我做错了什么。
提前致谢。
经过一点蛮力,我想出了这样的解决方案,也许对某些人有用。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int) event.getRawX();
int y_cord = (int) event.getRawY();
img.setX(x_cord - 150);
img.setY(y_cord - 230);
break;
default:
break;
}
return true;
}
数字150和230只是因为定位是从imageview的左上角开始的,我懒得确定实际的触摸位置within imageview和设置相对于该坐标的定位。 :)