【问题标题】:Android create layers in canvasAndroid 在画布中创建图层
【发布时间】:2012-05-25 18:10:27
【问题描述】:

我想了解如何在我的 Android 应用程序中创建图层(如在 Photoshop 中)。我想实现一件基本的事情:当我在画布中添加图像时,例如一些图形,我希望能够在画布上绘画,但绘画不能影响图形的线条。然后我需要将该图像保存在我的 SD 卡上。

有什么建议/建议/例子吗?我可以用什么来实现这一点?

【问题讨论】:

  • 你看过PorterDuff.Mode吗?我假设您的图层是静态的,一旦绘制就无法删除或移动。这是正确的还是您想要完全像 Photoshop 一样的图层?
  • 是的,我想在 Photoshop 中创建类似图层的东西。
  • 所以它们可以被添加、删除和移动?
  • 不,我唯一想要的只是添加用户在第一个布局上绘制的路径......以及第二个布局上的图像......所以带有图像的第二个可以在第一个的顶部。并且在绘制路径时,不要跨越添加的图像。我不想移动或删除它们。只有两层:路径和图像。
  • 所以您希望路径通过图像可见?

标签: android paint android-canvas layer


【解决方案1】:

您绘制的顺序构成图层。 创建一些您绘制的对象堆栈,然后修改单个对象(在图层中绘制)或在此堆栈中移动它们(更改图层)。 使用相同的顺序创建要保存的图像。

【讨论】:

    【解决方案2】:

    查看您可以向Paint 申请的各种Xfermodes。 PorterDuff.Mode 提供了一些选项,就像您在 Photoshop 中获得的一样,例如加网和乘法、变亮和变暗。不过,AvoidXferMode 可能更适合您的需求。

    【讨论】:

      【解决方案3】:

      您可以在 FrameLayout 中组合图层。您可能需要一些技巧来确保将触摸事件传递到正确的层。

      一旦你让 android 以你喜欢的方式组合你的视图,你可以 mFrameLayout.onDraw(Canvas c) 将整个东西绘制到画布上。

      这篇文章有一些关于如何将你的视图组变成 jpeg 的信息 Image on canvas to JPEG file

      【讨论】:

        【解决方案4】:

        画布中的图层。

            Bitmap bitmap=Bitmap.createBitmap(500,500, Bitmap.Config.ARGB_8888);
            Canvas canvas=new Canvas(bitmap);
            Paint paint_outer=new Paint();
            paint_outer.setColor(Color.parseColor("#DEB887"));
            paint_outer.setStrokeWidth(140);
            paint_outer.setStyle(Paint.Style.STROKE);
            canvas.drawCircle(250,250,150,paint_outer);
        
            Paint paint_inner=new Paint();
            ComposePathEffect pathEffect=new ComposePathEffect(new CornerPathEffect(40),new DiscretePathEffect(60f,25f));
            paint_inner.setPathEffect(pathEffect);
            paint_inner.setColor(Color.parseColor("#8B4513"));
            paint_inner.setStrokeWidth(90);
            paint_inner.setStyle(Paint.Style.STROKE);
            canvas.drawCircle(250,250,150,paint_inner);
            iv.setImageBitmap(bitmap);
        

        【讨论】:

          猜你喜欢
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 2012-01-28
          • 1970-01-01
          • 2016-06-06
          • 1970-01-01
          • 2015-06-01
          • 2012-08-06
          相关资源
          最近更新 更多