ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android中的canvas介绍,android高级面试

2022-01-10 13:31:07  阅读:115  来源: 互联网

标签:canvas int float Canvas Android save public android


  1. //得到一个Bitmap对象,当然也可以使用别的方式得到。但是要注意,改bitmap一定要是mutable(异变的)

  2. Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888);

  3. Canvas c = new Canvas(b);

  4. /*先new一个Canvas对象,在调用setBitmap方法,一样的效果

  5. * Canvas c = new Canvas();

  6. * c.setBitmap(b);

  7. */

第三种方式,是调用SurfaceHolder.lockCanvas(),返回一个Canvas对象。

2、canvas可以绘制的内容

1)填充

drawARGB(int a, int r, int g, int b)

drawColor(int color)

drawRGB(int r, int g, int b)

drawColor(int color, PorterDuff.Mode mode)

2)几何图形

canvas.drawArc (扇形)

canvas.drawCircle(圆)

canvas.drawOval(椭圆)

canvas.drawLine(线)

canvas.drawPoint(点)

canvas.drawRect(矩形)

canvas.drawRoundRect(圆角矩形)

canvas.drawVertices(顶点)

cnavas.drawPath(路径)

3)图片

canvas.drawBitmap (位图)

canvas.drawPicture (图片)

4)文本

canvas.drawText

3. Canvas的保存和回滚

为了方便一些转换操作,Canvas还提供了保存和回滚属性的方法(save和restore),比如你可以先保存目前画纸的位置(save),然后旋转90度,向下移动100像素后画一些图形,画完后调用restore方法返回到刚才保存的位置。

Canvas提供的该功能的API如下:

[java]  view plain copy

  1. /**

  2. * 保存当前的matrix和clip到私有的栈中(Skia内部实现)。任何matrix变换和clip操作都会在调用restore的时候还原。

  3. * @return 返回值可以传入到restoreToCount()方法,以返回到某个save状态之前。

  4. */

  5. public native int save();

  6. /**

  7. * 传入一个标志,来表示当restore 的时候,哪些参数需要还原。该参数定义在Canvas中,参照下面。

  8. * save()方法默认的是还原matrix和clip,但是可以使用这个方法指定哪些需要还原。并且只有指定matrix和clip才有效,其余的几个参数是

  9. !
    * 用于saveLayer()和saveLayerAlpha()方法 的。

  10. */

  11. public native int save(int saveFlags);

  12. /**

  13. * 回到上一个save调用之前的状态,如果restore调用的次数大于save方法,会出错。

  14. */

  15. public native void restore();

  16. /**

  17. * 返回栈中保存的状态,值等译 save()调用次数-restore()调用次数

  18. */

  19. public native int getSaveCount();

  20. /**

  21. * 回到任何一个save()方法调用之前的状态

  22. */

  23. public native void restoreToCount(int saveCount);

  24. /**saveFlags的参数*/

  25. public static final int MATRIX_SAVE_FLAG = 0x01;//需要还原Matrix

  26. public static final int CLIP_SAVE_FLAG = 0x02;//需要还原Clip

  27. /**下面三个参数在saveLayer的时候使用,具体作用,没有搞明白*/

  28. public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 0x04;

  29. public static final int FULL_COLOR_LAYER_SAVE_FLAG = 0x08;

  30. public static final int CLIP_TO_LAYER_SAVE_FLAG = 0x10;

  31. public static final int ALL_SAVE_FLAG = 0x1F; //还原所有

  32. /*关于saveLayer的具体flags还不大明白它的含义,具体怎么使用在下面例子中*/

  33. public int saveLayer(RectF bounds, Paint paint, int saveFlags)

  34. public int saveLayer(float left, float top, float right, float bottom,

  35. Paint paint, int saveFlags)

  36. public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)

  37. public int saveLayerAlpha(float left, float top, float right, float bottom,

  38. int alpha, int saveFlags)

pha(RectF bounds, int alpha, int saveFlags)

  1. public int saveLayerAlpha(float left, float top, float right, float bottom,

  2. int alpha, int saveFlags)

标签:canvas,int,float,Canvas,Android,save,public,android
来源: https://blog.csdn.net/m0_66144992/article/details/122408508

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有