我正在使用旧版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
我需要检测画布上的触摸坐标,而不是屏幕上的触摸位置。要么是一种确定“查看端口”的方法,要么将触摸坐标转换为画布坐标。