gpt4 book ai didi

java - 使用 setOnTouchListener 获取触摸坐标

转载 作者:行者123 更新时间:2023-12-01 15:45:41 25 4
gpt4 key购买 nike

我正在编写我的第一个 Android 应用程序(我对 Java 并不陌生)。这是我的问题:我使用 ImageView 来显示图形。我想编写一个方法,当 ImageView 被触摸时调用并获取触摸坐标作为参数。

这是我当前的解决方案:

img.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
clickfield((int) e.getX(), (int) e.getY());
toast.setText((int) e.getX() + ", " + (int) e.getY());
toast.show();
return true;
}
});

...

public void clickfield(int x, int y) {
...
}

我有两个问题:首先,它返回的坐标并不是手机上的真实坐标。我的虚拟机的分辨率为 480 x 800 像素。由于ImageView的大小为480*480像素,因此y值应该在0到480之间。实际值在0到320之间。这可以通过乘以1.5来解决,但这对我来说没有意义。

第二个问题是ImageView的内容480 * 480 Bitmap出现在屏幕中间。我更喜欢将其显示在顶部,特别是因为如果我触摸图像的左上角而不是 0, 0,上面的代码会检测到类似 0, 72 的内容。我必须更改 ImageView 的哪些属性?

如果有任何引用/教程可以回答我的问题,发布链接就足够了。

我的 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">
<ImageView
android:src="@drawable/icon"
android:id="@+id/ImgTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_gravity="top">
</ImageView>
</LinearLayout>

最佳答案

您获得的坐标与监听器所附加的(图像) View 相关。您的图像会缩放以适合该 View 。所以你的 View 是 320px 宽或高。如果你想获得实际的像素坐标,你必须根据 View 的宽度/高度和图像的宽度/高度来计算。几乎就像您所做的那样,但是具有动态因素,因为您会针对每种屏幕尺寸获得不同的结果。

实际图像的位置也与此有关。如果图像大于或小于您的 View ,则会在保持其纵横比的同时调整其大小。如果这与您的屏幕纵横比不匹配,您将会看到一些边框。要将图像放置在布局顶部,您应该让 ImageView 自动将其高度调整为图像所需的大小。您可以通过在布局文件(在 ImageView 标记内)中将 android:layout_height 设置为 wrap_content 来实现此目的。如果它仍然停留在中间,您可能还需要调整外部布局的重力。请参阅 android:gravity (这里您想要的是 top)。

关于java - 使用 setOnTouchListener 获取触摸坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070502/

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