android中图形图像处理之drawable用法分析

本文主要介绍了android中图形图像处理的可绘制用法,并详细分析了Android中绘制所涉及的各种常用技巧和方法,具有一定的参考价值,有需要的朋友可以参考一下。

本文展示了android中图形和图像处理的可绘制用法。分享给你,供你参考。如下所示:

一、如何获取 res 中的资源

包:android.content.res

主类:资源

主界面根据功能分为以下三个部分:

getXXXX()

例如:

int getColor(int id)

Drawable getDrawable(int id)

Getstring (int id)直接获取RES中存储的资源。

InStream OpenRawResource (IntID)获取资源的数据流并读取资源数据。

void ParseBundleXtras(XML resource parser,Bundle Out Bundle)从XML文件中获取数据。

Resource为每种资源提供了相应的接口来获取这种资源。除了直接获取资源,还提供数据流获取资源,在以后的应用开发中会经常用到。所以如何获取资源如下:resourcer=this.getcontext()。get resources();

二、如何获取资源中的画图对象

包:android.graphics.drawable

主类:可绘制

Drawable是一个虚拟类。一张图片具体怎么画,需要对它的子类进行详细的分析,比如bitmap Drawable。

其主要界面如下:

BitmapDrawable()

BitmapDrawable(位图位图)

BitmapDrawable(字符串文件路径)

BitmapDrawable(InputStream为)

空白绘制(画布画布)

最终位图getBitmap()

最终油漆getPaint()

Drawable是一个抽象类。在BitmapDrawable中,我们可以看到位图的具体操作。仔细看一下BitmapDrawable的构造函数,我们会发现它对应的是Resource中的openRawResource()接口,所以我们可以通过以下方法获取位图:

Resources r=this.getContext()。get resources();

inputstream is=r . openraw resource(r . draw able . my _ background _ image);

BitmapDrawable bmpDraw=new BitmapDrawable(is);

bitmap BMP=BMP draw . get bitmap();

Paint

包:android.graphics

Android SDK中的介绍:paint类保存了关于如何绘制几何图形、文本和位图的样式和颜色信息。主要定义画笔的风格,画笔的大小/颜色等。

Typeface

包:android.graphics

Android SDK中的介绍:typeface类规范了字体的字样和内在风格。主要是定义:字体。

核心类显示资源

包:android.graphics

主要类:Canvas

Android SDK中的介绍:canvas类保存“draw”调用。要绘制一些东西,您需要4个基本组件:一个保存像素的位图、一个托管绘制调用(写入位图)的画布、一个绘图原语(例如Rect、Path、text、bitmap)和一个paint(描述绘图的颜色和样式)。

根据结构的功能,主界面分为以下三个部分:

布尔clipXXXX()区域运算:差交集替换reverse _ difference并集异或

void drawXXXX()画图函数

void rotate()void scale()void skew()void translate()画布操作函数

这里需要特别说明一下:Region是一个区域,即画布中的有效区域,它是在无效区域上绘制的,对画布没有任何改动。

Drawable类

Drawable是一个通用的抽象类。它的目的是告诉你能画出什么。您会发现基于Drawable类的各种绘图类,如下表所示。当然,你可以继承它来创建你自己的绘图类。

有三种方法来定义和实例化一个Drawable:保存一张图片到你的项目资源,使用XML文件来描述Drawable属性或者用一个普通的类来构造它。我们将在下面讨论两种技术(对于一个有经验的开发人员来说,构造不是最新的技术)。

从资源图像文件中创建

一个相对简单的方法是在你的程序中添加一个图像,然后通过资源文件引用这个文件。支持的文件类型有PNG(首选)JPG(可接受)GIF(不推荐)。显然,这种方法是显示应用程序图标跟的首选方法,也可以用来显示徽标。例如,其余的图像可以用在游戏中。

将图像资源和文件添加到项目的res/drawable/目录中。从此,您可以在代码或XML布局中引用它。也就是说,还可以用资源号来指代。比如选择一个文件,去掉后缀就行了(比如my_image.png把它称为my_image)。

注意:SDK指出,为了减少图像的存储空间,可以在构建时压缩图像。如果不想被压缩,可以把图片放在res/raw/目录下。

SDK给出的示例:

LinearLayout mLinearLayout

受保护的void onCreate(Bundle saved instancestate){

super . oncreate(savedInstanceState);

//创建要在其中添加ImageView的LinearLayout

mLinearLayout=new linear layout(this);

//实例化ImageView并定义其属性

ImageView i=新ImageView(this);

I . setimageresource(r . drawable . my _ image);

I . setadjustviewbounds(true);//设置ImageView边界以匹配Drawable的尺寸

i.setLayoutParams(新图库。LayoutParams(LayoutParams。WRAP_CONTENT,LayoutParams。WRAP _ CONTENT));

//将ImageView添加到布局中,并将布局设置为内容视图

mlinearlayout . add view(I);

setContentView(mLinearLayout);

}获取可绘制对象:

resources RES=m context . get resources();

drawable my image=RES . getdrawable(r . drawable . my _ image);

注意:保持每种资源类型一一对应可以保证你的项目状态的一致性,所以你不用担心有很多不同类型的对象来实例化它。例如,如果使用相同的图像资源实例化两个可绘制对象。然后修改一个Drawables的属性(比如alpha),不幸的是这个效果也会出现在另一个对象上。所以在处理同一个资源的多个实例对象时,不是直接转换成Drawable,而是要执行补间动画。

如何向ImageView添加资源:

图像视图

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '

android:tint='#55ff0000 '

Android:src=' @ drawable/my _ image '/

从XML文件中创建

到目前为止,您应该熟悉根据Android的原则开发用户界面。因此,您还应该理解定义XML文件对于对象的功能和灵活性的重要性。这个想法被无数次用于Drawables。

如果想创建一个不依赖于变量或用户交换的Drawable对象,用XML定义应该是个不错的方法。即使您希望在应用程序中更改其属性来增强用户体验。您应该考虑将对象放入XML,因为您可以随时修改它们的属性。

在XML中定义Drawable时,将XML文件保存到项目目录下的res/drawable目录,然后通过调用Resource.getDrawable()检索并实例化它,并在XML文件中向它传递资源ID号。Drawable的任何子类都支持inflate的方法,它会通过XML实例化你的程序。任何Drawable都支持XML的扩展,以使用特殊的XML属性来帮助定义对象的属性。你可以检查任何可绘制的子类文档,看看如何定义XML文件。

过渡拉伸定义如下:层拉伸的延伸,用于在第一层和第二层之间交叉渐变。它可以在XML中定义。用过渡元素。过渡中的每个可绘制对象都在嵌套项目中定义。更多关于TransitionDrawable的信息,请查看http://androidappdocs . app spot com/reference/Android/graphics/drawable/TransitionDrawable . html。

在RES/drawable/expand _ collapse . XML中定义它:

?xml版本='1.0 '编码='utf-8 '?

transition xmlns:Android=' http://schemas . Android . com/apk/RES/Android '

item Android:drawable=' @ drawable/pic 1 '/

item Android:drawable=' @ drawable/pic 2 '/

/过渡

实例化并处理以下内容:

公共类MainActivity扩展Activity {

/**首次创建活动时调用。*/

@覆盖

public void on create(Bundle saved instancestate){

super . oncreate(savedInstanceState);

setContentView(r . layout . main);

resources RES=get resources();

TransitionDrawable trans=(TransitionDrawable)RES . get drawable(r . drawable . expand _ collapse);

ImageView image=(ImageView)findViewById(r . id . ImageView 01);

image . setimagedrawable(trans);

trans . start transition(3000);

}

}ShapeDrawable

当你想画一些动态的二维图片时,一个ShapeDrawable对象可能会对你有很大的帮助。有了ShapeDrawable,你可以通过编程画出任何你想要的图像和风格。

ShapeDrawable继承自Drawable,所以可以调用Drawable中的一些函数,比如视图的背景,通过setBackgroundDrawable()来设置。当然,您可以在自定义视图布局中绘制图形,因为ShapeDrawable有自己的draw()方法。可以创建view的子类,在视图期间绘制ShapeDrawable。OnDraw()方法。

ShapeDrawable类(和android.graphics.drawable包中的很多其他Drawable类型一样)允许你定义Drawable公共方法的各种属性。您可以调整一些属性,包括透明度、颜色过滤、不透明度和颜色。

NinePatchDrawable

NinePatchDrawable绘制可缩放的位图图像,Android会自动调整其大小以适应显示的内容。一个例子是作为背景的NinePatch,使用标准的Android按钮,这些按钮必须拉伸以适应不同长度的字符。

NinePatchDrawable是一个标准的PNG图像,它包括一个额外的1像素边界。你必须用后缀9.png保存它,并把它保存在项目的res/drawable目录下。

该边界用于确定图像的可缩放区域和静态区域。你可以在左边和顶线上画一个或多个黑色的1像素来指出可伸缩的部分(你可以需要很多可伸缩的部分)。它在伸缩部分的相对位置是一样的,所以大的部分总是很大。

您也可以在图像的右侧和底部绘制一个可选的可绘制区域(有效的内部边距线)。如果你的视图对象将NinePath设置为背景,然后指定了一个特殊的视图字体,它会自行伸缩,使所有的文本都适合根据右线和底线(如果有的话)设计的区域。当然不包括内缘线。Android可以使用左线和顶线来定义可绘制区域。

让我们弄清楚这两条线,左边的线和上面的线,来定义哪些图像的像素允许在拉伸过程中被复制。底部右边的线用来定义一个图像的相对位置,视图的内容放入其中。

希望这篇文章对大家的Android编程有所帮助。

原文地址:http://www.ccttoo.com/html/2119.html

本文来自网络,不代表菜鸟教程之家立场,转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值