android中图形图像处理之drawable用法分析
如果你的视图对象将NinePath设置为背景,然后指定了一个特殊的视图字体,它会自行伸缩,使所有的文本都适合根据右线和底线(如果有的话)设计的区域。要绘制一些东西,您需要4个基本组件:一个保存像素的位图、一个托管绘制调用(写入位图)的画布、一个绘图原语(例如Rect、Path、text、bitmap)和一个paint(描述绘图的颜色和样式)。本文主要介绍了android中图形图像处理的可绘制用法,
本文主要介绍了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)