android:绘图
View:组件,了解为画布
Drawable:所有可见对象的形容,了解为:素材类
Bitmap:图片类
Canvas:画笔
Paint:画笔款式与色彩、特效的汇合
近期很多网友对Android用户界面的设计示意很感兴趣,对于Android UI开发自绘控件和游戏制作而言把握好绘图根底是必不可少的。本次专题分10节来讲述,无关OpenGL ES相干的可能将放到当前再走漏。本次次要波及以下四个包的相干内容:
android.content.res 资源类
android.graphics 底层图形类
android.view 显示类
android.widget 控件类
一、android.content.res.Resources
对于Android平台的资源类android.content.res.Resources可能很多网友比拟生疏,一起来看看SDK上是怎么介绍的吧,Contains classes for accessing application resources, such as raw asset files, colors, drawables, media or other other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.平时用到的二进制源文件raw、色彩colors、图形drawables和多媒体文件media的相干资源均通过该类来治理。
int getColor(int id) 对应res/values/colors.xml
Drawable getDrawable(int id) 对应res/drawable/
XmlResourceParser getLayout(int id) 对应res/layout/
String getString(int id) 和CharSequence getText(int id) 对应res/values/strings.xml
InputStream openRawResource(int id) 对应res/raw/
void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) 对应res/xml/
String[] getStringArray(int id) res/values/arrays.xml
float getDimension(int id) res/values/dimens.xml
二、android.graphics.Bitmap
作为位图操作类,Bitmap提供了很多实用的办法,罕用的咱们总结如下:
boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 压缩一个Bitmap对象依据相干的编码、画质保留到一个OutputStream中。其中第一个压缩格局目前有JPG和PNG
void copyPixelsFromBuffer(Buffer src) 从一个Buffer缓冲区复制位图像素
void copyPixelsToBuffer(Buffer dst) 将以后位图像素内容复制到一个Buffer缓冲区
咱们看到创立位图对象createBitmap蕴含了6种办法在目前的Android 2.1 SDK中,当然他们应用的是API Level均为1,所以说从Android 1.0 SDK开始就反对了,所以大家能够放心使用。
static Bitmap createBitmap(Bitmap src)
static Bitmap createBitmap(int[] colors, int width, int height, Bitmap.Config config)
static Bitmap createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
static Bitmap createBitmap(int width, int height, Bitmap.Config config)
static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)
static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) //创立一个能够缩放的位图对象
final int getHeight() 获取高度
final int getWidth() 获取宽度
final boolean hasAlpha() 是否有通明通道
void setPixel(int x, int y, int color) 设置某像素的色彩
int getPixel(int x, int y) 获取某像素的色彩,android开发网提醒这里返回的int型是color的定义
三、android.graphics.BitmapFactory
作为Bitmap对象的I/O类,BitmapFactory类提供了丰盛的结构Bitmap对象的办法,比方从一个字节数组、文件系统、资源ID、以及输出流中来创立一个Bitmap对象,上面本类的全副成员,除了decodeFileDescriptor外其余的重载办法都很罕用。
static Bitmap decodeByteArray(byte[] data, int offset, int length) //从字节数组创立
static Bitmap decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
static Bitmap decodeFile(String pathName, BitmapFactory.Options opts) //从文件创建,门路要写全
static Bitmap decodeFile(String pathName)
static Bitmap decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts) //从输出流句柄创立
static Bitmap decodeFileDescriptor(FileDescriptor fd)
static Bitmap decodeResource(Resources res, int id) //从Android的APK文件资源中创立,android123提醒是从/res/的drawable中
static Bitmap decodeResource(Resources res, int id, BitmapFactory.Options opts)
static Bitmap decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)
static Bitmap decodeStream(InputStream is) //从一个输出流中创立
static Bitmap decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)
四、android.graphics.Canvas
从J2ME MIDLET时咱们就晓得Java提供了Canvas类,而目前在Android平台中,它次要工作为治理绘制过程,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).
该类次要提供了三种构造方法,别离为结构一个空的Canvas、从Bitmap中结构和从GL对象中创立,如下
Canvas()
Canvas(Bitmap bitmap)
Canvas(GL gl)
同时Canvas类的一些字段保留着重要的绘制办法定义,比方Canvas.HAS\_ALPHA\_LAYER\_SAVE\_FLAG 保留时须要alpha层,对于Canvas类提供的办法很多,每个都很重要,上面咱们一一作介绍
boolean clipPath(Path path)
boolean clipPath(Path path, Region.Op op)
boolean clipRect(float left, float top, float right, float bottom)
boolean clipRect(Rect rect)
boolean clipRect(float left, float top, float right, float bottom, Region.Op op)
boolean clipRect(Rect rect, Region.Op op)
boolean clipRect(RectF rect)
boolean clipRect(RectF rect, Region.Op op)
boolean clipRect(int left, int top, int right, int bottom)
boolean clipRegion(Region region, Region.Op op)
boolean clipRegion(Region region)
void concat(Matrix matrix)
void drawARGB(int a, int r, int g, int b)
void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
void drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, Paint paint)
void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
void drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, int height, boolean hasAlpha, Paint paint)
void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
void drawCircle(float cx, float cy, float radius, Paint paint)
void drawColor(int color)
void drawColor(int color, PorterDuff.Mode mode)
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
void drawLines(float[] pts, Paint paint)
void drawLines(float[] pts, int offset, int count, Paint paint)
void drawOval(RectF oval, Paint paint)
void drawPaint(Paint paint)
void drawPath(Path path, Paint paint)
void drawPicture(Picture picture, RectF dst)
void drawPicture(Picture picture, Rect dst)
void drawPicture(Picture picture)
void drawPoint(float x, float y, Paint paint)
void drawPoints(float[] pts, int offset, int count, Paint paint)
void drawPoints(float[] pts, Paint paint)
void drawPosText(char[] text, int index, int count, float[] pos, Paint paint)
void drawPosText(String text, float[] pos, Paint paint)
void drawRGB(int r, int g, int b)
void drawRect(RectF rect, Paint paint)
void drawRect(float left, float top, float right, float bottom, Paint paint)
void drawRect(Rect r, Paint paint)
void drawRoundRect(RectF rect, float rx, float ry, Paint paint)
void drawText(String text, int start, int end, float x, float y, Paint paint)
void drawText(char[] text, int index, int count, float x, float y, Paint paint)
void drawText(String text, float x, float y, Paint paint)
void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
void drawVertices(Canvas.VertexMode mode, int vertexCount, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, Paint paint)
static void freeGlCaches()
boolean getClipBounds(Rect bounds)
final Rect getClipBounds()
int getDensity()
DrawFilter getDrawFilter()
GL getGL()
int getHeight()
void getMatrix(Matrix ctm)
final Matrix getMatrix()
int getSaveCount()
int getWidth()
boolean isOpaque()
boolean quickReject(Path path, Canvas.EdgeType type)
boolean quickReject(float left, float top, float right, float bottom, Canvas.EdgeType type)
boolean quickReject(RectF rect, Canvas.EdgeType type)
void restore()
void restoreToCount(int saveCount)
final void rotate(float degrees, float px, float py)
void rotate(float degrees)
int save()
int save(int saveFlags)
int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags)
int saveLayer(RectF bounds, Paint paint, int saveFlags)
int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)
int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
final void scale(float sx, float sy, float px, float py)
void scale(float sx, float sy)
void setBitmap(Bitmap bitmap)
void setDensity(int density)
void setDrawFilter(DrawFilter filter)
void setMatrix(Matrix matrix)
void setViewport(int width, int height)
void skew(float sx, float sy)
void translate(float dx, float dy)
五、android.graphics.Color
无关Android平台上示意色彩的办法有很多种,Color提供了惯例次要色彩的定义比方Color.BLACK和Color.GREEN等等,咱们平时创立时次要应用以下静态方法
static int argb(int alpha, int red, int green, int blue) 结构一个蕴含通明对象的色彩
static int rgb(int red, int green, int blue) 结构一个规范的色彩对象
static int parseColor(String colorString) 解析一种色彩字符串的值,比方传入Color.BLACK
本类返回的均为一个×××相似 绿色为0xff00ff00,红色为0xffff0000。咱们将这个DWORD型看做AARRGGBB,AA代表Aphla通明色,前面的就不难理解,每个分成WORD整好为0-255。
明天咱们持续介绍Android平台底层绘图类的相干内容,在Android UI开发专题(一) 之界面设计中咱们介绍了无关Android平台资源应用以及Bitmap相干类的操作,接下来将会以实例的形式给大家演示各种类的用途以及留神点。明天咱们持续理解android.graphics包中比拟重要的绘图类。
一、 android.graphics.Matrix
无关图形的变换、缩放等相干操作罕用的办法有:
void reset() // 重置一个matrix对象。
void set(Matrix src) //复制一个源矩阵,和本类的构造方法 Matrix(Matrix src) 一样
boolean isIdentity() //返回这个矩阵是否定义(曾经有意义)
void setRotate(float degrees) //指定一个角度以0,0为坐标进行旋转
void setRotate(float degrees, float px, float py) //指定一个角度以px,py为坐标进行旋转
void setScale(float sx, float sy) // 缩放
void setScale(float sx, float sy, float px, float py) //以坐标px,py进行缩放
void setTranslate(float dx, float dy) //平移
void setSkew (float kx, float ky, float px, float py) //以坐标px,py进行歪斜
void setSkew (float kx, float ky) //歪斜
二、android.graphics.NinePatch
NinePatch是Android平台特有的一种非矢量图形天然拉伸解决办法,能够帮忙惯例的图形在拉伸时不会缩放,实例中Android开发网提醒大家对于Toast的显示就是该原理,同时SDK中提供了一个工具名为Draw 9-Patch,无关该工具的应用办法能够参考咱们经公布的 Draw 9-Patch应用办法介绍一文。因为该类提供了高质量反对通明的缩放形式,所以图形格局为PNG,文件命名形式为.9.png 的后缀比方android123.9.png。
三、android.graphics.Paint
Paint类咱们能够了解为画笔、画刷的属性定义,本类罕用的办法如下:
void reset() //重置
void setARGB(int a, int r, int g, int b) 或 void setColor(int color) 均为设置Paint对象的色彩
void setAntiAlias(boolean aa) //是否抗锯齿,须要配合void setFlags (Paint.ANTI\_ALIAS\_FLAG) 来帮忙打消锯齿使其边缘更平滑。
Shader setShader(Shader shader) //设置暗影,Shader类是一个矩阵对象,如果为NULL将革除暗影。
void setStyle(Paint.Style style) //设置款式,个别为 FILL 填充,或者STROKE凸起成果。
void setTextSize(float textSize) //设置字体大小
void setTextAlign(Paint.Align align) //文本对齐形式
Typeface setTypeface(Typeface typeface) //设置字体,通过Typeface能够加载Android外部的字体,个别为宋体对于中文,局部ROM能够本人增加比方雅黑等等
void setUnderlineText(boolean underlineText) //是否设置下划线,须要撇和void setFlags (Paint.UNDERLINE\_TEXT\_FLAG) 办法。
四、android.graphics.Rect
Rect咱们能够了解为矩形区域,相似的还有Point一个点,Rect类除了示意一个矩形区域地位形容外,android123提醒次要能够帮忙咱们计算图形之间是否碰撞(蕴含)关系,对于Android游戏开发比拟有用,其次要的成员contains蕴含了三种重载办法,来判断蕴含关系
boolean contains(int left, int top, int right, int bottom)
boolean contains(int x, int y)
boolean contains(Rect r)
五、android.graphics.Region
Region在Android平台中示意一个区域和Rect不同的是,它示意的是一个不规则的样子,能够是椭圆、多边形等等,而Rect仅仅是矩形。同样Region的boolean contains(int x, int y) 成员能够判断一个点是否在该区域内
六、android.graphics.Typeface
Typeface类是帮忙形容一个字体对象,在TextView中通过应用setTypeface办法来制订一个输入文本的字体,其间接结构调用成员create办法能够间接指定一个字体名称和款式,比方
static Typeface create(Typeface family, int style)
static Typeface create(String familyName, int style)
同时应用isBold和isItalic办法能够判断出是否蕴含粗体或斜体的字型。
final boolean isBold()
final boolean isItalic()
该类的创立办法还有从apk的资源或从一个具体的文件门路,其具体方法为
static Typeface createFromAsset(AssetManager mgr, String path)
static Typeface createFromFile(File path)
static Typeface createFromFile(String path)
本文转自 https://blog.51cto.com/xyzlmn/816808,如有侵权,请分割删除。