【问题标题】:Android: Drawing overlays on pannable canvas detect touch locationAndroid:在可平移画布上绘制覆盖检测触摸位置
【发布时间】:2013-11-29 20:56:21
【问题描述】:

我正在开发一个遗留的 android 应用程序,它使用一个自定义类 (TouchGallery),该类扩展了 Gallery 类以将 JPG 显示为杂志中的页面。在某些页面上会有一个或多个可触摸(动态添加)的叠加层,以触发 Intent 以打开带有 URL 的浏览器。我已经设法在覆盖的onDraw() 方法中在页面上绘制了叠加层。但是,现在我的问题是检测触摸了哪个浓缩覆盖。

页面是可缩放的(因此用户可以放大和缩小),并且如果放大,他们可以在页面周围平移。 TouchGallery 类得到接触,我可以将接触传递给我的 ScalableImageView 自定义类。我的问题是要知道画布上的触摸在哪里,以便我可以将正确的 URL 发送到浏览器。我相信您已经知道MotionEvent 坐标基于屏幕而不是画布。

当图像完全缩小时,我设法使触摸工作(到一定程度)。然而,一旦页面被缩放,触摸坐标就不再靠近它们需要的位置。我使用比例值(screenWidth / bitmapWidth = scaleValue)将我的触摸坐标“转换”为完全可见的图像。我认为这种方法不可行。

画布用于绘图时没有触摸坐标。但我认为我想做的事情是可能的,因为如果你考虑一些绘图应用程序,你可以放大它,它会在正确的位置绘制线条(或正在绘制的任何东西)。

我的视图结构如下: TouchGallery > TouchImageview > ScalableImageView > EnrichmentBlockView

有关自定义类的更多信息:

触摸画廊

TouchGallery extends Gallery implements ScaleGestureDetector.OnScaleGestureListener, GestureDetector.OnDoubleTapListener

处理加载 JPG 页面


TouchImageView

TouchImageView extends TwoDScrollView implements ScalableView, GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener, GestureDetector.OnDoubleTapListener

处理手势(缩放、平移、双击)


ScalableImageView

ScalableImageView extends View implements BitmapConsumer, View.OnTouchListener

句柄显示位图对象和EnrichmentBlockView的绘图


EnrichmentBlockView

EnrichmentBlockView extends View

处理叠加层的大小,我希望它处理特定丰富叠加层的触摸

是否可以setOnTouchListener() 动态添加视图?如果是,我会怎么做?

我尝试动态添加按钮作为叠加层,但是当您添加两个以上的按钮时,页面缩放和平移变得非常缓慢。如果做得正确,这会是最好的选择吗?我可能错误地添加了视图,这可能会导致反应迟缓。

tl;博士

我需要检测画布上的触摸坐标,而不是屏幕上的触摸位置。或者,一种确定“视口”或将触摸坐标转换为画布坐标的方法。

【问题讨论】:

    标签: android overlay android-canvas


    【解决方案1】:

    我设法通过在覆盖的onTouch() 事件中使用getLocationInWindow() 并分别从motionEvent.getX()motionEvent.getY() 中减去x 和y 值来解决我的问题。然后我将这些值传递给我的 EnrichmentBlockView 自定义类。

    本质上是将触摸坐标“转换”为画布坐标。然后在onDraw() 中检查Rect 对象是否包含我的“转换后”坐标。如果坐标在 Rect 中,则 URL 将传递给被触发的浏览器意图。

    希望这能帮助遇到类似问题的其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2016-03-01
      • 1970-01-01
      • 2015-01-15
      • 2013-09-13
      • 2013-06-25
      相关资源
      最近更新 更多