【问题标题】:Android ImageView Coordinate ClickingAndroid ImageView坐标点击
【发布时间】:2015-08-18 16:49:21
【问题描述】:

我在我的应用程序中实现了一个 ViewPager 屏幕幻灯片。我希望用户能够单击图像的某些部分以打开对话框或网站。当我使用 iOS 时,我做了一个解决方法,在我计划用户拥有的每台设备上找到图像的坐标。这显然不是最好的方法,但当时我并没有直接计划使用 Android 版本。现在,情况发生了变化,我开始认为这种实现会非常乏味且不实用,尤其是在有这么多 Android 设备的情况下。在不使用坐标和硬编码位置的情况下单击图像的这些部分的最佳方法是什么?任何帮助表示赞赏!谢谢

编辑:这是一个图片示例(请原谅我可怕的计算机绘图技能)...黑框代表 android 设备屏幕,红色框代表整个图像,绿色、黄色和蓝色框是我的部分希望能够点击。如果不清楚,请告诉我。

【问题讨论】:

  • 只是部分图片?
  • 嗨@0X0nosugar,我发布了我想说的图片示例,但是是的,图片的某些部分
  • 也许您可以通过在 Photoshop 中编辑图像并裁剪或修剪您想要作为按钮做出反应的每个视图来更轻松地实现您想要的效果,然后在您的布局 xml 中放置许多图像视图并为每个视图设置 onClickListener其中。
  • android 一方面有RelativeLayout,另一方面有密度无关像素(dp)的概念。因此,也许可以将透明的可点击视图放在一个包含您的图片的 ImageView 之上,并在 dp.xml 中设置它们的宽度和高度以及边距(左侧和顶部)。当然,如果您更改图片,您可能必须更改可点击视图的 dp 值。但是这样你就可以避免硬编码每个设备的坐标。
  • @HusseinElFeky,我打算这样做,但我必须在屏幕幻灯片中使用多个基本图像,所以我必须制作大量编辑后的图像,然后正确对齐。这是一个好主意,但不是我想要的。谢谢!

标签: android android-viewpager coordinates android-imageview


【解决方案1】:

我知道这个问题已经有 2 或 3 周了,但我刚刚找到了我的问题的答案。如果您知道原始图像的大小(我的是 1024x748),那么您可以计算与 ImageView 和原始图像大小相关的近似坐标。

例如,平板电脑屏幕为 2048x1440。

一些伪代码:

// Touch Coordinates
float eventX = event.getX();
float eventY = event.getY();

// Get ImageView's size
// ImageView v
float viewW = v.getWidth();
float viewH = v.getHeight();

// Ratio:
// originalW and originalH are the image's original size
float ratioW = viewW/originalW;
float ratioH = viewH/originalH;

// Get "true" coordinates
float x = eventX/ratioW;
float y = eventY/ratioH;

上面的代码将为您提供与ImageView 的触摸坐标相关的基本图像坐标。此外,ImageView 比例类型必须居中(或者至少对于我的代码,您的代码可能不同?)。

我希望这可以帮助其他人通过堆栈溢出进行搜索!这可能不是最强大的做事方式,但对于那些需要通过数千个 Android 设备点击的人来说,这是一个简单的解决方法!

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2011-12-21
    • 2011-09-28
    • 2011-06-21
    • 1970-01-01
    • 2014-05-29
    • 2013-02-04
    • 2011-05-09
    相关资源
    最近更新 更多