android - 获取用户触摸的真实 x 和 y 坐标

标签 android bitmap imageview ontouchlistener

我需要将 onTouch 事件的 X、Y 坐标映射到 ImageView 内的位图 X、Y 坐标来执行此操作,我使用以下方法。

然而,这种方法似乎只适用于以下情况:
a) 完全缩放图像(一直放大)
b) 如果我让我的应用程序全屏显示,无论如何都可以工作

  final int index = event.getActionIndex();
  touchLocation = new float[] {
    event.getX(index), event.getY(index)
  };

  Matrix matrix = new Matrix();
  ImageView view = getImageView();
  view.getImageMatrix().invert(matrix);

  matrix.postTranslate(view.getScrollX(), view.getScrollY());
  matrix.mapPoints(touchLocation);
  // touchLocation[0] is real x and [1] is real y  

但是我的 Activity 是一个 ActionBar Activity ,所以我在 Y 轴上的位置有点错误。我尝试扣除 ActionBar 和 StatusBar 的高度,但这并不总是有效。

奇怪的是,在全屏模式下,无论我是完全放大还是完全缩小图像,我总是计算出正确的坐标,但是对于任何其他 Activity 类型,这将无法正确映射点。

最佳答案

我使用此代码获取屏幕上的实际触摸轴:

PointF p = new PointF(event.getX(), event.getY());
View v = this;// your view
View root = v.getRootView();
while (v.getParent() instanceof View && v.getParent() != root) {
  p.y += v.getTop();
  p.x += v.getLeft();
  v = (View) v.getParent();
}

希望这对你也有用

关于android - 获取用户触摸的真实 x 和 y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460604/

相关文章:

java - 我可以使用 C++ 中的 Android NDK 创建位图并将它们快速传递给 Java 吗?

Android ImageView 通过 ImageView OnTouchListener

android - 错误的 dex 文件中的 MultiDexExtractor

android - 如何检测 View 寻呼机垂直滑动并将该事件发送到下面的布局?

android - 是否可以通过调用 Canvas.drawText() 来显示多色文本?

android - 我怎样才能把这个配置放到我的华为手机上?

android - 如何更改保存的透明位图的背景颜色

C# 位图不按原样保存

Android ImageView setImageResource 在代码中

imageview - 在 ImageView 中居中图像