参考转载自http://blog.csdn.net/kakaxi1o1/article/details/17515625
1.XML animation-list 贴动画
作为背景使用,demo:在res/drawable目录下: 顺序显示动画1:animation_list_order.xml倒序显示动画2:animation_list_reverse.xml
Activity使用:
import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.ImageView; public class AnimationListActivity extends Activity { private ImageView animationIV; private Button buttonA, buttonB, buttonC; private AnimationDrawable animationDrawable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.test10); animationIV = (ImageView) findViewById(R.id.animationIV); buttonA = (Button) findViewById(R.id.buttonA); buttonB = (Button) findViewById(R.id.buttonB); buttonC = (Button) findViewById(R.id.buttonC); buttonA.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationIV.setImageResource(R.drawable.animation_order); animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.start(); } }); buttonB.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.stop(); } }); buttonC.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationIV.setImageResource(R.drawable.animation_reverse); animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.start(); } }); } }
2 XML bitmap
(1)普通图片资源
Android支持三种位图格式:.png(推荐使用)、.jpg(可以接受)、.gif(不推荐)。 你可以使用位图文件的文件名作为资源ID来直接引用位图文件,也可以在XML中定义一个资源别名。 注意:在程序build的过程中位图文件会被aapt工具自动无损压缩来优化。比如,如果一个全彩的PNG图片所需要的色彩不超过256色,aapt工具就会使用一个调色板来将该图转换成一张8位的PNG图。画面质量并没有变化,但是所需的存储空间却减少了。因此,要注意到在build的过程中这个目录下的图片的二进制数据会发生变化。如果你打算使用比特流的方式读取图片来转换成位图资源,请将这些图片放在res/raw/目录下。在/res/raw/目录下的图片不会被优化。 当我们将图片文件放在res/drawable/目录下时,Android就会为每一张图片创建一个Drawable资源。这些资源最终将被编译成BitmapDrawable对象。在Java代码中,通过R.drawable.filename的形式引用这些资源;在XML中,使用@[package]:drawable/filename的形式来引用。 例: 比如我们有一张图片存放为res/drawable/myimage.png,下面的代码则是以Drawable的形式来获取图像,也可以获取BitmapResources res = Activity.this.getResources() ;Drawable d = res.getDrawable(R.drawable.mydrawable) ;
Bitmap bmp = ((BitmapDrawable) d).getBitmap() ;(2)XML bitmap XML图片资源
对应资源类:BitmapDrawable有如下属性: android:antialias——开启或关闭抗锯齿 android:dither——开启或关闭图像抖动(如果位图与显示屏幕的像素配置不相同时会用到,比如一张ARGB 8888位图和一个RGB565的显示屏) android:filter——开启或关闭滤镜。当收缩或是拉伸位图时使用这个来使位图看上去更平滑。 android:mipMap--是否使用文理映射过滤提示 android:autoMirrored-- android:gravity——当位图大小比它所在的容器小的时候,使用这个属性来决定位图在容器中的位置。可取的值有:top、bottom、left、right、center_vertical、fill_vertical(纵向缩放位图使之与容器等高)、center_horizontal、fill_horizontal(横向缩放位图使之与容器等宽)、center、fill(纵向与橫向都缩放使之完全铺满容器,这也是默认值)、clip_vertical(呃。。。)、clip_horizontal(呃。。。)。 android:tileMode——定义平铺模式。如果定义了,那么位图将会重复,并且Gravity属性将失效。可取的值有disabled(默认值,不启用平铺)、clamp(复制位图边缘的颜色来填充容器剩下的空白部分)、repeat(复制整个位图来填充容器)、mirror(与repeat类似,但是是交替的镜像复制,即相邻的两张是镜像对称的)demo如下:
3. XML Nine-Patch
(1)Nine-Patch图像资源
Nine-Patch图像资源文件必须以9.png作为文件扩展名,如abc.9.png该图像资源的主要作用是:防止图像的某一部分被拉伸;确定将图像作为背景图的控件中内容显示的位置;
Android SDK本身提供了一个Draw 9-patch的工具,启动<sdk目录>\tools\draw9patch.bat命令启动该工具;
可以通过此工具在png图的四周绘制1个像素粗的直线,上边缘和左边缘的直线分别表示图像在水平和垂直方向可位值的范围。如果水平或垂直方向的某个区域不需要拉伸,则可不绘制相应的直线;右边缘和下边缘的直线分别表示图像所在控件中内容的显示范围,内容只在右边缘和下边缘绘制直线的区域显示,表示内容显示范围和拉伸范围的两给直线有一个重要区别就是表示内容显示范围的直线中间不能断开,而表示拉伸范围的直线中间可以断开;
Nine-Patch图像资源与普通图像资源引用方法相同,在引用时只写文件名,R.drawable.abc ;(2)XML Nine-Patch资源
对应资源类:NinePatchDrawableNine-Patch图像资源也有与其对应的xml图像资源,使用<nine-patch>标签来引用Nine-Patch格式的图像android:dither --防抖android:autoMirrored --4. XML layer-list 图层资源
多个图层堆叠显示。图层资源类似于<FrameLayout>,不同的是<FrameLayout>标签中可以包含任意的控件,而图层资源每一层都只有是图像,定义图层资源必须使用<layer-list>作为资源文件的根节点,<layer-list>标签中包含多个<item>标签,每一个标签表示一个图像,最后一个<item>标签显示在最顶层;
默认情况下,图像会尽量充满显示图像的范围,图像可能会有拉伸,为了避免图像拉伸,可以在<item>标签中使用<bitmap>标签引用图像;主属性:android:opacity --透明选择android:autoMirrored --item属性如下 :android:left --左边偏移的像素android:top --顶部偏移的像素android:right --android:bottom --android:drawable --android:id --
使用方式:在layout布局文件中:android:background="@drawable/layer_list"也可以使用代码实现:
- Resources r = getResources();
- Drawable[] layers = new Drawable[2];
- layers[0] = r.getDrawable(R.drawable.pic1);
- layers[1] = r.getDrawable(R.drawable.pic2);
- LayerDrawable layerDrawable = new LayerDrawable(layers);
- ((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable);
5. XML selector 图像状态资源
处理控件在不同状态下的显示状态<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bm" android:state_focused="true"></item> <item android:drawable="@drawable/bm" android:state_pressed="true"></item> <item android:drawable="@drawable/bm"></item> </selector>也可以在item内使用shape等等
6. 图像级别(Level)资源
图像资源状态只能指定几种有限的状态,可以通过图像级别指定更多的状态;图像级别是一个整数的区间,可以通过ImageView.setImageLevel或Drawable.setLevel方法切换不同状态的图像;图像级别资源是xml文件,必须以<level-list>为根节点,每一个item表示一个级别区间,下面是一个xml文件;通过ImageView.setImageLevel(level),根据level所在的区间设定显示的图像资源,如果level不在任一区间内则清空ImageView当前图像;<level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="2" android:minLevel="0" android:drawable="@drawable/hell" /> <item android:maxLevel="4" android:minLevel="3" android:drawable="@drawable/hell" /></level-list>7.淡入淡出(Cross-fade)资源
也是切换两个图像(不支持多于两个图像的切换),并且使这两个图像以淡入淡出效果 进行切换,如电灯在开关时逐渐变亮或逐渐变暗;
<transition xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/hell"/> <item android:drawable="@drawable/hell"/></transition>
TransitionDrawable da = ...; // 从第一张图片切换到第二张图片,时间效果为1秒 da.startTransition(1000); // 从第二张图片切换到第一张图片,时间效果为1秒 da.reverseTransition(1000);8.嵌入(insert)图像资源
使用场景:要显示的图像要求要小于装载图像的View(图小于View区域),也是通过xml资源定义,只有一个节点inset。<inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/hell" android:insetLeft="10dip" > <!--图像距离左边的距离,延伸-->上/下/右的距离--></inset>9.剪切(Clip)图像资源,使用剪切图像资源可以只显示图像的一部分,如可以通过此来制作进度条;
<clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="horizontal" // 指定截取的方向 android:drawable="@drawable/hell" // 指定要截取的图像 android:gravity="left" > // 指定截取的方式,在此为从左侧开始截取</clip>ClipDrawable cd = ...; cd.setLevel(1000);上面ClipDrawable.setLevel(level)设置截取的图像宽度,ClipDrawable预设了最大值10000(表示不进行截取),最小值为0(表示不显示);
10. 比例(Scale)图像资源
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/hell" android:scaleGravity="center" // 设置图像显示的位置 android:scaleHeight="70%" // 设置图像显示的高度 android:scaleWidth="80%" > // 设置图像显示的宽度</scale>11.形状资源
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > shape可以指定就矩形,oval(椭圆),line(直线),ring(圆) <corners> 定义圆角 </corners> <gradient android:angle="45" android:startColor="#000000" android:endColor="#FFFFFF" > 定义颜色渐变,从左下角到或上角 </gradient> <padding> 定义控件内容到边框的距离 </padding> <stroke> 定义边线 </stroke> <solid> 定义填充 </solid> <size> 定义大小 </size></shape>