学习Android 有一段时间了,看完了Android SDK中的大部分文档,但是始终感觉自己还缺少很多,后来发现,Android SDK中只是介绍了Google自己开发的那一部分如何使用,Android中引用至Java的部分如何使用却没有说明。当然这也不是Google的职责,但是这对我们C++程序员来说的确是缺少了很多,在这里我们将对Google“缺少的部分”并结合Android SDK中Reference说明来详细介绍,并不断的补充完善。

首先,如何获取 res 中的资源

数据包package:android.content.res
主要类:Resources
Android SDK中的简介:Class for accessing an application’s resources.Class for accessing an application’s resources. This sits on top of the asset manager of the application (accessible through getAssets()) and provides a higher-level API for getting typed data from the assets.
其主要接口按照功能,划分为以下三部分:

getXXXX()

例如:

int getColor(int id)

Drawable getDrawable(int id)

String getString(int id)

直接获取res中存放的资源

InputStream openRawResource(int id)

获取资源的数据流,读取资源数据

void parseBundleExtras(
XmlResourceParser parser, Bundle outBundle)
从XML文件中获取数据

Resource为每种资源提供了相应的接口来获取这种资源,除了可以直接获取资源外,还额外提供了以数据流的方式获取资源,这在以后的应用程序开发中会经常使用,那么如何获取Resources了,如下:Resources r = this.getContext().getResources();

其次,如何获取资源中的画图对象

数据包package:android.graphics.drawable
主要类:Drawable
Android SDK中的简介:A Drawable is a general abstraction for “something that can be drawn.” Most often you will deal with Drawable as the type of resource retrieved for drawing things to the screen; the Drawable class provides a generic API for dealing with an underlying visual resource that may take a variety of forms.
看了以上简介,发现Drawable是个virtual class,具体如何画图,需要具体分析Drawable的子类,例如:BitmapDrawable
Android SDK中的简介:A Drawable that wraps a bitmap and can be tiled, stretched, or aligned. You can create a BitmapDrawable from a file path, an input stream, through XML inflation, or from a Bitmap object. It can be defined in an XML file with the <bitmap> element.
其主要接口如下:

BitmapDrawable()

BitmapDrawable(Bitmap bitmap)

BitmapDrawable(String filepath)

BitmapDrawable(InputStream is)

void draw(Canvas canvas)

Draw in its bounds (set via setBounds) respecting optional effects such as alpha (set via setAlpha) and color filter (set via setColorFilter).

final Bitmap getBitmap()
final Paint getPaint()

Drawable是个抽象类,在BitmapDrawable中我们就看到位图的具体操作,在仔细看下BitmapDrawable的构造函数,我们就会发现与Resource中的openRawResource()接口是相对应的,就可以通过以下方法来获取位图:
Resources r = this.getContext().getResources();
Inputstream is = r.openRawResource(R.drawable.my_background_image);
BitmapDrawable  bmpDraw = new BitmapDrawable(is);
Bitmap bmp = bmpDraw.getBitmap();
关于Drawable深入的学习与理解,请阅读Android画图学习总结(三)——Drawable

然后,看几个常用的辅助类

  1. Paint
    数据包package:android.graphics
    Android SDK中的简介:The Paint class holds the style and color information about how to draw geometries, text and bitmaps. 主要就是定义:画刷的样式,画笔的大小/颜色等。
  2. Typeface
    数据包 package:android.graphics
    Android SDK中的简介:The Typeface class specifies the typeface and intrinsic style of a font. 主要就是定义:字体。

最后,核心类显示资源

数据包package:android.graphics
主要类:Canvas
Android SDK中的简介:The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).
按照结构的功能,将主要接口分为以下3部分:

boolean clipXXXX() Region区域操作:
DIFFERENCE
INTERSECT
REPLACE
REVERSE_DIFFERENCE
UNION
XOR
void drawXXXX() 画图函数
void rotate()
void scale()
void skew()
void translate()
画布操作函数

Region在这里需要特殊说明下:Region就是一个区域,也就是画布(Canvas)中的有效区域,在无效区域上draw,对画布没有任何改变。

总结说明

在写代码前,必须先仔细看下这几个主要的类,在这里我也只是把SDK中的介绍稍微总结下,它代替不了你对SDK的详细阅读,毕竟SDK是最详细的说明文档,在后续篇幅中再深入详细的介绍。

android 画图一相关推荐

  1. Android画图最基本的三个对象(Color,Paint,Canvas)

    Android画图最基本的三个对象(Color,Paint,Canvas) 三个类都存放在 android.graphics包下 1) Color :颜色对象,相当于现实生活中的 '调料' 2) Pa ...

  2. Android画图学习总结(四)——Animation(中)

    在Android画图学习总结(四)--Animation(上)中详细介绍了Tween Animation的定义.使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方 ...

  3. Android画图方式

    本文转载编辑自http://blog.chinaunix.net/u3/99423/showart_2203599.html Android画图方式 Android里面的画图分为2D和3D两种: 2D ...

  4. 【摘录】Android画图之抗锯齿

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.     方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. ...

  5. Android学习笔记(四):android画图之paint之setXfermode

    2019独角兽企业重金招聘Python工程师标准>>> setXfermode 设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状. ...

  6. Android 画图方式

    Android apk 里面的画图分为2D和3D两种:2D是由Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分opengl 的内容来实现简单的3D效果:3D部分是由OpenGL ...

  7. android 画图

     在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.     方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法 ...

  8. android 画图便宜,10个最好用的绘画App,赶紧mark

    版权声明 本文首发自原画人微信公共账号:CCGAA-vx 无需授权即可转载,但需保留以上版权声明 大家平时画画,用的最多的当然是板子.不过偶尔开个脑洞,画个头像什么的,还是平板最方便. 所以,今天给大 ...

  9. android中怎么画图工具,Android画图工具的制作

    Android 项目中使用到画图工具,本文记载如何实现,需详细了解cavas和surfaceviw 1 三星pad 三星pad自带的手写笔可以很好的支持画图,集成三星的sdk 以上三星官方提供的库文件 ...

最新文章

  1. 提速20倍!谷歌AI发布TensorFlow 3D
  2. FreeLibraryAndExitThread DLL中线程的安全退出
  3. 一个关于NHiberante,Linq数据源与UI交互引发的思考
  4. 无穷级数求和7个公式_亿图在线公式编辑器使用方法入门篇
  5. z-index失效的情况
  6. linux 调优 网络调优
  7. c语言实现可变单链表,c语言实现单链表
  8. 圣诞节PPT模板制作技巧分析
  9. MCGS组态屏CRC16(Modbus)校验计算脚本
  10. web前端学习第三周
  11. 微信公众号广告市场如此之大,还不抓住这个淘金的好机会
  12. Chrome浏览器常用插件记录
  13. pdf如何压缩?pdf太大怎么压缩大小?如何在线压缩pdf文件大小?
  14. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
  15. 【C#】CsvHelper 读写CSV文件
  16. rgw bucket reshard流程
  17. 【高数】不定积分之有理函数的积分
  18. 电离层穿刺点坐标计算
  19. 微软禁止员工购买苹果Mac iPad系列产品
  20. blast 简单使用

热门文章

  1. Win8快捷键收集大汇总
  2. java页面数值转文本_Java读取Excel表格以及读取数字列转为文本的解决办法
  3. 捷报频传!同程艺龙IPO在即,7月份微信小程序排名第二
  4. 你们知道官网购买服务器可以返佣吗
  5. Zabbix最新6.2安装及使用!
  6. Ceph学习——客户端读写操作分析
  7. 802.11协议wifi新加密方式WPA3介绍
  8. js红宝石书第四版--P446有点不严谨的地方的指出
  9. Android 圆形 ImageView
  10. Excel 快速计算相邻行之间的时间差