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

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

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

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

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

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

问候 沙提亚

【问题讨论】:

    标签: android blend


    【解决方案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()),如果为真,则成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多