2013-11-28 32 views
0

我正在使用旧版android应用程序,该应用程序使用扩展Gallery类的自定义类(TouchGallery)以在杂志中显示JPG作为页面。在某些页面上会有一个或多个可触摸的叠加层(动态添加),以触发使用URL打开浏览器的Intent。我设法在覆盖页面上覆盖覆盖图,覆盖了onDraw()方法。但是,现在我的问题是要检测哪个丰富覆盖层已被触摸。Android:在pannable画布上绘制叠加层检测触摸位置

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

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

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

我的看法结构如下: TouchGallery>TouchImageview>ScalableImageView>EnrichmentBlockView

更多关于自定义类信息:

TouchGallery

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

把手我想它来处理特定的富集叠加的触摸覆盖的大小和

是否有可能​​动态添加视图?如果是的话,我会怎么做呢?

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

tl; dr

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

回答

0

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

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

希望这会帮助有类似问题的其他人。