gpt4 book ai didi

Android getLocationOnScreen问题: wrong coordinates

转载 作者:行者123 更新时间:2023-11-29 02:11:45 39 4
gpt4 key购买 nike

我在获取 View 坐标时遇到了问题。我在 LinearLayout 中放置了三个自定义 View 。当我触摸它们中的任何一个时,我得到了错误的坐标。例如,第二个 View 位于中心,但 getLocationOnScreen() 返回 x = 0。这是不可能的。而且这个坐标总是不同于我可以通过 event.getX() 和 event.getY() 获得的值。

你能告诉我,问题是什么吗?

结果(通过 Log.w)

第一个 View :onTouch_coords: 0, 50

第二个 View :onTouch_coords: 0, 98

第三 View :onTouch_coords: 0, 146

这是 gui xml 文件:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<com.remaller.android.DragAndDropBasicsInheriting.DragableView
android:id="@+id/DragableView1"
android:layout_height="wrap_content"
android:src = "@drawable/icon" android:layout_width="wrap_content"/>

<com.remaller.android.DragAndDropBasicsInheriting.DragableView
android:id="@+id/DragableView2"
android:layout_height="wrap_content"
android:src = "@drawable/icon" android:layout_width="match_parent"/>

<com.remaller.android.DragAndDropBasicsInheriting.DragableView
android:id="@+id/DragableView3"
android:src = "@drawable/icon" android:layout_width="wrap_content" android:layout_height="match_parent"/>

</LinearLayout>

这是我的 DragableView 的源代码:

    public class DragableView extends ImageView
{
private void init()
{

}

@Override
public boolean onTouchEvent(MotionEvent event)
{
int action = event.getAction();

int this_coords[] = {0,0};
this.getLocationOnScreen(this_coords);

Log.w("daxh","onTouch_coords: "+this_coords[0]+", "+this_coords[1]);

switch(action)
{
case MotionEvent.ACTION_DOWN:

break;

case MotionEvent.ACTION_MOVE:

break;

case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
default:

break;
}

return super.onTouchEvent(event);
}

public DragableView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
init();
}

public DragableView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}

public DragableView(Context context)
{
super(context);
init();
}
}

这是 Activity 代码:

   public class DragAndDropBasicsInheritingActivity extends Activity
{
public static final int CREATE = 0x00000001;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.draganddropbasicsinheritingactivity_gui);
}
}

最佳答案

this.getLocationOnScreen(this_coords);它总是返回 thisView,又名 DragableView 的位置。 method specification here. .

因为这个 View 是你的主视图,它肯定会显示 x=0

event.getX() 为您提供执行触摸、拖动等事件的位置的坐标 x

这是两个对象的两种不同方法。

关于Android getLocationOnScreen问题: wrong coordinates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6843330/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com