混合图层图像Android上的触摸事件

Posted

技术标签:

【中文标题】混合图层图像Android上的触摸事件【英文标题】:Touch event on blended layer image Android 【发布时间】:2016-09-28 10:15:22 【问题描述】:

我有一个预切图像,即一个基础图像和基础图像的多个透明层。 我正在尝试在基础图像之上添加图层图像以选择图层并在其上应用不同的颜色。

我尝试了以下方法来实现但无法完成。

    ImageView - 我将 imageview 与透明层图像重叠。它显示了混合图像,但触摸事件始终检测到最终重叠的图像 ID。因为我用fill parent绘制图像,所以所有图层图像也是一样的

    Layer Drawable - 它只能允许可绘制的图像,但我的用例是从画廊或其他资源加载预剪辑。即使我不能在触摸时选择图层。

    GPUImage 库 - 图像未显示完整的图像视图。

问候 沙提亚

【问题讨论】:

【参考方案1】:

扩展View类,让onDraw()函数画出你想画的。 onTouchEvent() 函数实现触摸事件。您正在尝试做的事情不会包含在已经制作的任何视图中,但制作视图非常容易。只需使用正确的颜料和正确的透明度在画布上以正确的顺序绘制位图。

    @Override
        protected void onDraw(Canvas canvas) 
int numLayers = mLayers.size();
        for (int i = 0; i < numLayers; i++) 
            canvas.save();
            canvas.concat(matrix);
            //or
            canvas.translate(rect.left,rect.top);
            Bitmap b = mLayers.get(i);
            canvas.drawBitmap(b, paint);
            canvas.restore();
        

您最终只需要在画布的任何位置添加位图并根据需要进行排序。

【讨论】:

你能分享一些示例代码吗?我已经尝试过 LayeredImageView 但我无法获得动态图像视图 ID。 这只是绘制多次应用的位图的代码。您可以循环它或只应用一组它们。只需将这些东西应用到画布上。 canvas.drawBitmap(bitmap, paint) 并为相关位置的每个相关位图执行此操作。 @Override protected void onDraw(Canvas canvas) super.onDraw(canvas);矩阵矩阵 = getImageMatrix(); if (matrix != null) int numLayers = mLayers.size(); for (int i = 0; i 我已经尝试了上面的代码来绘制,但是在触摸时如何检测我点击了哪个图像。 如果您想为每个位图调整位置,您需要为它们存储矩形边界并适当地调整它们的位置。然后,当您进行触摸时。循环遍历矩形,检查每个矩形的 rect.contains(event.getX(), event.getY()),如果为真,则成功。

以上是关于混合图层图像Android上的触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

如何检测不同图像部分上的不同触摸事件

UIButton 上的 UIControl.State.Highlighted 图像仅在第一次触摸事件后有效

图像上的触摸事件,通过使用 UIButton 实现,但与 UIImageView 相比显示延迟

输入表单字段上的页面刷新触摸事件 - Android,Samsung

Android,帮助在触摸时旋转图像

无法在 Android 设备上的 Javascript 中获取触摸事件的坐标