当我拖动ImageView时,它不会放在我放开手指的地方。它位于右下方。我不明白什么是错的。
尝试了ImageView定位结果的各种选项是相同的
布局
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF8989"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.imageView1).setOnTouchListener(this);
findViewById(R.id.imageView1).getRootView().setOnDragListener(this);
}
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(null, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
float X = event.getX();
float Y = event.getY();
Log.d(LOGCAT, "X " + (int) X + "Y " + (int) Y);
View view = (View) event.getLocalState();
view.setX(X);
view.setY(Y);
view.setVisibility(View.VISIBLE);
default:
break;
}
return true;
}
logcat的
12-04 23:44:40.548: D/myLogs(32658): Width image 72 Height image 72
12-04 23:44:40.558: D/myLogs(32658): ACTION_DROP X 216Y 390
12-04 23:44:40.568: D/myLogs(32658): Real position: X 180.0Y 354.0
12-04 23:44:40.598: D/myLogs(32658): Drag ended
12-04 23:44:41.928: D/myLogs(32658): Width image 72 Height image 72
12-04 23:44:41.928: D/myLogs(32658): ACTION_DROP X 442Y 329
12-04 23:44:41.948: D/myLogs(32658): Real position: X 406.0Y 293.0
12-04 23:44:41.968: D/myLogs(32658): Drag ended
答案 0 :(得分:8)
替换
view.setX(X);
view.setY(Y);
与
view.setX(X-(view.getWidth()/2));
view.setY(Y-(view.getHeight()/2));
答案 1 :(得分:3)
这是因为它将图像的左上角放在你发布的地方。
要让它做你想做的事,基本上你需要从X中减去图像宽度的一半,从Y中减去一半的高度。
所以你应该有这样的东西:
view.setX((X - (image.width / 2));
view.setY(Y - (image.width / 2));
答案 2 :(得分:0)
v.setX(me.getRawX() - (v.getWidth()/ 2));
v.setY(me.getRawY() - (float)(v.getHeight()* 1.5 / 2));
我发现这个解决方案是从对象中心拖动的完美答案。
答案 3 :(得分:0)
只是因为有人需要帮助: 我试过它,发现问题出在rootview上,如果你给你的布局一个id(你正在移动图像的那个)而不是重新发布
findViewById(R.id.imageView1).getRootView().setOnDragListener(this);
findViewById(R.id.imageView1).getRootView().findViewById(R.id.yourLayout).setOnDragListener(this);
应该这样做。
将imageView置于中间尝试别人已经说过的话:
view.setX(X - iv.getWidth()/2);
view.setY(Y - iv.getHeight()/2) ;
这会将imageView放在中间 快乐编程:)