Android拖放。拖动后定位图像

Android拖放。拖动后定位图像,android,drag-and-drop,imageview,android-relativelayout,Android,Drag And Drop,Imageview,Android Relativelayout,当我拖动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

当我拖动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>
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

这是因为它将图像的左上角放置在您真正需要的位置

为了让它做你想做的,基本上你需要从X减去图像宽度的一半,从Y减去图像高度的一半

所以你应该有这样的东西:

view.setX((X - (image.width / 2));
view.setY(Y - (image.width / 2));
替换

view.setX(X);
view.setY(Y);

v、 setX(me.getRawX()-(v.getWidth()/2))

v、 setY(me.getRawY()-(float)(v.getHeight()*1.5/2))


我发现这个解决方案是从对象中心拖动的完美答案。

以防万一有人需要帮助: 我试过了,发现问题出在rootview上,如果你给你的布局一个id(你正在移动图像的那个id)而不是relace

findViewById(R.id.imageView1).getRootView().setOnDragListener(this);    
findViewById(R.id.imageView1).getRootView().findViewById(R.id.yourLayout).setOnDragListener(this);     
应该可以了。
把图像想象放在中间尝试其他人已经说过的:

view.setX(X - iv.getWidth()/2);
view.setY(Y - iv.getHeight()/2) ;
这将把图像放在中间。
快乐编程:)

谢谢你的澄清,我做到了。前面的ImageView插入到右下方,现在就插入到右下方。是否所有位置都会发生这种情况?您的视图宽度、高度和x是多少,添加了日志!根据代码查看72*72标准android图标,它工作正常。你有什么问题?你怎么能说“就在下面”-你的下降y位置是390,你的视图y位置是354。你是说390和354是一样的吗?如果你想更清楚地看到变化,请尝试使用大尺寸图像图标的代码。你现在可以看到区别了。
findViewById(R.id.imageView1).getRootView().setOnDragListener(this);    
findViewById(R.id.imageView1).getRootView().findViewById(R.id.yourLayout).setOnDragListener(this);     
view.setX(X - iv.getWidth()/2);
view.setY(Y - iv.getHeight()/2) ;