我正在编写我的第一个Android应用程序(我不是java的新手)。继承我的问题: 我使用ImageView来显示图形。我想写一个方法,当触摸ImageView时调用thas并将触摸坐标作为参数。
这是我目前的解决方案:
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) {
...
}
我有两个问题: 首先,它返回的坐标不是手机上的真实坐标。我的vm分辨率为480 x 800像素。由于ImageView的大小为480 * 480像素,因此y值应介于0和480之间。此值可以在0到320之间。这可以通过将其乘以1.5来解决,但这对我来说没有意义。
第二个问题是作为ImageView内容的480 * 480位图出现在屏幕中间。我更喜欢在顶部显示它,特别是因为上面的代码检测到类似0,72的东西,如果我触摸图像的左上角而不是0,0。 我必须更改图像视图的哪个属性?
如果有任何参考/教程可以回答我的问题,那么只要发布链接就足够了。
我的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>
答案 0 :(得分:1)
您获得的坐标与侦听器所连接的(图像)视图相关。 您的图像会缩放以适合该视图。所以你的观点是320px宽或高。 如果要获取实际的像素坐标,则必须从视图宽度/高度和图像坐标计算出来。几乎和你一样,但有一个动态因素,因为你会得到不同的屏幕尺寸。
实际图像的定位也与此有关。如果图像大于或小于您的视图,则会在保持其宽高比的同时调整大小。如果这与您的屏幕宽高比不匹配,您将获得一些边框。要将图像放置在布局的顶部,您应该让ImageView
自动将其高度调整为所需的图像大小。您可以通过在布局文件中设置android:layout_height
到wrap_content
(ImageView
标记内)来实现。如果它仍然位于中间,您可能还需要调整外部布局重力。请参阅android:gravity
(此处您想要的是top
)。