到目前为止,我的博客文章主要围绕着objective-c中的iOS编程。有一些关于C # 的帖子,但是他们更多的是关于从C # 到objective-c的切换。
然而,在过去的一年里,我一直在iOS和Android开发之间平均分配我的时间。
由于越来越多的移动应用程序开发人员同时支持这两个平台,我想为什么不博客两个平台!
这一系列的帖子将围绕在这两个平台上绘制各种各样的东西。你会惊喜地发现两者实际上非常相似!
第2部分-造型
第2部分-造型
接下来,我们将讨论如何为您的图纸设置颜色,笔触和其他绘画类型的标志。
这是Android和iOS有轻微偏差的地方。在iOS中,您可以直接在CGContextRef上设置这些属性,在Android中,您必须创建一个名为Paint的辅助对象,其中所有这些属性都存在。
首先让我们看一个基本的,背景颜色
iOS系统
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
Android
油漆p = 新油漆 ();
setColor(Color.RED);
注意,在Android代码片段中,我们必须创建一个paint对象。在iOS代码片段中,我们使用我们的上下文,并调用静态方法来设置颜色。
现在让我们看看添加一个笔画,这是一个有点棘手:
iOS系统
CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor);
CGContextSetLineWidth(ctx, 2);
安卓系统
油漆p = 新油漆 ();
p.setColor (颜色。黑色 );
p.setStrokeWidth( 2 );
在iOS中,它就像我们做的背景颜色,我们只是适当的属性,虽然不是它被称为笔画宽度,它被称为线宽。不过,在Android中,您应该注意,我们设置的颜色属性与我们为背景色设置的属性相同。这意味着如果你想中风是相同的颜色作为背景颜色,你必须绘制你的路径两次,用2个不同的油漆对象。
绘图时一个方便的技巧是剪辑您的区域。例如,您可能希望限制用户看到的内容,但很难达到该限制。所以,相反,你在你的视口之外绘制,但你剪辑了它之外的一切:
iOS系统
CGContextClipToRect(ctx,cgrect制造 (0,0,100,100));
安卓系统
canvas.clipRect (新的android.graphics.Rect(0,0,100,100));
下一部分不是很造型,但它确实会影响绘图的结果。变换。使用变换,可以在图形上下文中旋转或移动要绘制的点。
在Android和iOS中,它们的处理方式非常相似:
iOS系统
CGContextTranslateCTM(ctx, x, y);
CGContextRotateCTM(ctx, radians);
Android系统
canvas.translate(x,y);
canvas.rotate (度);
在iOS中值得注意的是,旋转是在弧度,而在Android中它的度!
最后,在绘图框架中,您通常会传递您的上下文 (CGContextRef和Canvas),这意味着某些样式属性或转换可能会应用于您的上下文,不应该在任何地方应用。例如,我可能为我正在绘制的矩形设置旋转变换。但是,当我稍后去画一条线时,我可能不想要那个变换!这是否意味着我必须撤消变换?还是有捷径?
这就是保存/恢复发挥作用的地方:
iOS系统
CGContextSaveGState(ctx);
//
CGContextRestoreGState(ctx) 的绘图代码;
Android系统
canvas.save();
//
canvas.restore() 绘制代码;
基本上,当你在你的上下文中调用保存时,你说的是记住我保存之前的所有设置,当你稍后调用restore时,它会将其恢复到上次保存。和保存/恢复是基于堆栈的,这意味着你可以多次调用保存,然后恢复后:
例如:
Save() // 1
Save() // 2
Restore() // 在2之前恢复
Restore() // 在1之前恢复
这涵盖了造型的基础知识。
敬请关注了解绘画!
史蒂芬·扎哈鲁克 (SteveZ)