android 画图一
学习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
然后,看几个常用的辅助类
- Paint
数据包package:android.graphics
Android SDK中的简介:The Paint class holds the style and color information about how to draw geometries, text and bitmaps. 主要就是定义:画刷的样式,画笔的大小/颜色等。 - 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 画图一相关推荐
- Android画图最基本的三个对象(Color,Paint,Canvas)
Android画图最基本的三个对象(Color,Paint,Canvas) 三个类都存放在 android.graphics包下 1) Color :颜色对象,相当于现实生活中的 '调料' 2) Pa ...
- Android画图学习总结(四)——Animation(中)
在Android画图学习总结(四)--Animation(上)中详细介绍了Tween Animation的定义.使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方 ...
- Android画图方式
本文转载编辑自http://blog.chinaunix.net/u3/99423/showart_2203599.html Android画图方式 Android里面的画图分为2D和3D两种: 2D ...
- 【摘录】Android画图之抗锯齿
在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式. 方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. ...
- Android学习笔记(四):android画图之paint之setXfermode
2019独角兽企业重金招聘Python工程师标准>>> setXfermode 设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状. ...
- Android 画图方式
Android apk 里面的画图分为2D和3D两种:2D是由Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分opengl 的内容来实现简单的3D效果:3D部分是由OpenGL ...
- android 画图
在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式. 方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法 ...
- android 画图便宜,10个最好用的绘画App,赶紧mark
版权声明 本文首发自原画人微信公共账号:CCGAA-vx 无需授权即可转载,但需保留以上版权声明 大家平时画画,用的最多的当然是板子.不过偶尔开个脑洞,画个头像什么的,还是平板最方便. 所以,今天给大 ...
- android中怎么画图工具,Android画图工具的制作
Android 项目中使用到画图工具,本文记载如何实现,需详细了解cavas和surfaceviw 1 三星pad 三星pad自带的手写笔可以很好的支持画图,集成三星的sdk 以上三星官方提供的库文件 ...
最新文章
- 提速20倍!谷歌AI发布TensorFlow 3D
- FreeLibraryAndExitThread DLL中线程的安全退出
- 一个关于NHiberante,Linq数据源与UI交互引发的思考
- 无穷级数求和7个公式_亿图在线公式编辑器使用方法入门篇
- z-index失效的情况
- linux 调优 网络调优
- c语言实现可变单链表,c语言实现单链表
- 圣诞节PPT模板制作技巧分析
- MCGS组态屏CRC16(Modbus)校验计算脚本
- web前端学习第三周
- 微信公众号广告市场如此之大,还不抓住这个淘金的好机会
- Chrome浏览器常用插件记录
- pdf如何压缩?pdf太大怎么压缩大小?如何在线压缩pdf文件大小?
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
- 【C#】CsvHelper 读写CSV文件
- rgw bucket reshard流程
- 【高数】不定积分之有理函数的积分
- 电离层穿刺点坐标计算
- 微软禁止员工购买苹果Mac iPad系列产品
- blast 简单使用