android:绘图 (android.graphics包)

news2024/12/24 8:13:21

在这里插入图片描述

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lnton羚通关于如何解决nanoPC-T4 upgrade报错问题?

nanoPC-T4 在 ​​# sudo apt update 和 sudo apt upgrade​​升级或安装软件 ​​sudo apt install xxx​​时遇到以下问题:​​Failed to set up interface with /etc/hostapd/​ Setting up hostapd (2:2.6-15ubuntu2.8) ... Job for hostapd.service failed be…

学习 Linux 系统路线图

在计算机科学领域,Linux 操作系统以其稳定性、灵活性和卓越性能而受到广泛欢迎。要真正掌握 Linux 系统,我们需要深入了解其关键组成部分,包括系统、内存、进程、网络和存储等模块。让我们深入探索这些模块,以建立起对 Linux 系统…

【轻量级神经网络】ShuffleNetv1-2详解

文章目录 1、ShuffleNetV11.1、分组卷积1.2、channel shuffle1.3、ShuffleNet基本单元1.4、整体结构 2、ShuffleNetV22.1、基本单元2.2、整体结构 1、ShuffleNetV1 1.1、分组卷积 Group convolution是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组…

KVM配置使用ovs网桥

KVM配置使用ovs网桥 1、安装openvswitch 2、启动服务 3、配置ovs 重启网络服务 systemctl restart network 4、 KVM配置使用ovs网桥 配置生效:virsh net-define br0.xml virsh net-start bro virsh net-autostart br0 5、虚…

怎么实现技术评卷时间0投入的?(上)

01 痛苦的技术问答题评审 指针走到了九点,凝视着时钟的技术招聘官Jasmine从昏沉中回到现实,她将咖啡连同叹息一口抿了下去,并端正坐在电脑前。又是一天的评卷日…… 技术招聘已持续数周,公司筛选出了100位嵌入式工程师候选人的技…

ATA-2000系列高压放大器——应用场景介绍

ATA-2000系列高压放大器——应用场景介绍 ATA-2000系列是一款理想的可放大交、直流信号的高压放大器。最大差分输出1600Vp-p (800Vp)高压,可以驱动高压型负载。电压增益数控可调,一键保存常用设置,为您提供了方便简洁的操作选择,同…

【03 英语语法:从句(名词从句、定语从句/形容词从句、状语从句/副词从句)】

从句 从句:名词从句、定语从句、状语从句(名定状名形副)1. 名词从句(名词):主语、宾语、表语、同位语、宾补▲名词从句的种类(按引导词): that、whether、疑问词 句子⑴…

pycharm配置anaconda环境

前提: 使用anaconda已经创建了一个环境名为test,现在要将test环境中的python解释器作为pycharm中工程的解释器。 如何添加解释器 点击:File->Project->Python Interpreter->右上角Add Interpreter->Add Local Interpreter. 选…

blender 发射体粒子

发射体粒子的基础设置 选择需要添加粒子的物体,点击右侧粒子属性,在属性面板中,点击加号,物体表面会出现很多小点点,点击空格键,粒子会自动运动,像下雨一样; bender 粒子系统分为两…

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一:运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录, 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…

【Modbus通信实验二】VC++编写串口调试助手

编写串口调试助手并能在虚拟机中实现虚拟端口通信。步骤如下: 项目中引入Microsoft Communications Control组件,并编写串口初始化函数。 void CMODBUSDlg::initcomm() {//串口状态,避免重复打开串口CommOpenFlag FALSE;//设置串口端口号…

Maven构建工具下载与配置(图文详细)

一.下载安装 1.找到官网 2.进行下载 3.解压文件到想要的目录 二.系统配置 配置本地仓库localRepository 1.配置本地仓库位置xml 为了方便管理,在apache-maven-3.9.4目录下创建mvn_rep 2.找到ocalRepository标签 3.设置本地仓库路径 配置私服(由于正常…

2023年7月京东空调行业品牌销售排行榜(京东数据运营)

上半年空调市场的热度较高,尽管受家电市场整体环境的影响,同比来看空调销量销额有一定幅度的下滑,但从环比来看,空调市场的销量销额纷纷翻倍增长。不过,进入7月份,空调市场整体就比较低迷了。 根据鲸参谋平…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的,千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用,也未验证正确性,实不应该。

Viobot开机指南

0.前言 本篇旨在让每个拿到Viobot设备的用户都能够第一时间测试它的效果,以及将设备配置到自己的环境下面。 1.上电 首先,我们先要把设备接上电源线和网线,最简单的方式就是网线直连电脑。 电源选用12V1.5A设备自带的电源即可。 2.配置网…

免费的苹果笔记本清理内存软件CleanMyMac X

苹果笔记本如何清理内存?CleanMyMac X给你支招。随着时间的推移,苹果笔记本的内存可能会变得拥挤,导致性能下降。不过,你不必担心,因为我们有一种解决方案,能够帮助你优化你的苹果笔记本的内存使用效率。Cl…

小型气象站——智能监测、多要素集成

小型气象站是一种简易的气象监测设备,具有智能监测、多要素集成、便于安装携带的特点,能够让人们随时随地获取当地的气象信息,接下来,就让我们介绍一下它的基本信息吧。 1.小型气象站的概念 小型气象站可以同时测量风速、风向、…

「Python|aiohttp|并发与协程」将HTTP请求提速成百上千倍!一次性掌握把requests请求改成协程的通用方法

本文主要介绍如何通过使用aiohttp库将同步的http请求改成异步方式请求,从而降低等待网络IO过程中时间和计算资源的浪费。 主要包括如何将常见的requests请求改用aiohttp异步执行以及如何将异步的批量请求方法封装成普通方法/同步调用方式,给业务模块调用…

Docker容器进入的4种方式(推荐最后一种)

Docker容器进入的4种方式【推荐最后一种】 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。 一、使用docker attach进入Docker容器二、…

问题解决 | 关于torch中遇到的错误及解决

本博客主要解决在torch使用中遇到的问题与解决~ 1.安装相关问题 1.1.conda虚拟环境内无法安装torch(pip install torch ) 解决方案: 如果是GPU版本,先查看cuda版本如果nvcc -V 命令运行后出来的是cuda11.3的话,其他…