我想学习如何在我的Android应用程序中创建图层(如在photoshop中)。我想实现一个基本的东西:当我在画布中添加一个图像时,例如,我想要能够绘制画布,但画面不能影响图形的线条。然后我需要将该图像保存在我的SD卡上。
有什么建议/意见/例子吗?我可以用什么来实现这个目标?
您绘制的顺序使图层成为可能。创建一些您绘制的对象堆栈,然后修改单个对象(在图层中绘制)或在此堆栈中移动它们(更改图层)。使用相同的顺序创建要保存的图像。
看看你可以应用于Xfermode
的各种Paint
s。 PorterDuff.Mode
提供了一些像Photoshop一样的选项,例如,屏幕和倍增,变亮和变暗。然而,AvoidXferMode
可能更适合您的需求。
您可以在FrameLayout中构建图层。您可能需要一些技巧来确保将触摸事件传递到正确的图层。
一旦你有android组合你的视图你喜欢,你可以FrameLayout.onDraw(Canvas c)将整个事物绘制到画布上。
本文提供了有关如何将您的视图组转换为jpeg Image on canvas to JPEG file的一些信息
画布中的图层。
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);