剪切(Clip)图像资源

使用剪切图像资源可以只显示一部分图像,这种资源经常被用在进度条的制作上。剪切图像资源是一个XML格式文件,资源只包含一个标签。下面看一个制作进度条的例子。

首先准备两个png图像(background.png和progress.png),将它们放到res/drawable目录中,然后在res/drawable目录中建立一个clip.xml文件,并输入如下的内容。

源代码文件:src/ch10/Drawable/res/drawable/clip.xml

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?> 
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progress"
android:clipOrientation="horizontal"
android:gravity="left" />

<clip>标签使用了如下的3个属性来控制如何截取图像。

android:drawable:指定要剪切的原图像。

android:clipOrientation:截取的方向。可取的值:horizontal和vertical。分别表示水平和垂直方向截取图像。

android:gravity:表示如何截取图像。例如,left表示从左侧截取图像,right表示从右侧截取图像。

本例通过一个<LinearLayout>标签和一个<ImageView>标签实现进度条,布局代码如下:

源代码文件:src/ch10/Drawable/res/layout/clip.xml

1
2
3
4
5
6
7
8
9
10
11
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:background="@drawable/background">
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/clip"/>
</LinearLayout>

下面的代码截取了部分背景图像。

源代码文件:src/ch10/Drawable/src/mobile/android/drawable/Clip.java

1
2
3
ImageView imageview = (ImageView) findViewById(R.id.image);  
ClipDrawable drawable = (ClipDrawable) imageview.getBackground();
drawable.setLevel(3000);

上面的代码涉及一个截取比例的问题。ClipDrawable类内部预设了一个最大的level值10000(Android SDK未提供API修改该值)。如果这个level的值为0,表示截取图像的宽度或高度为0,也就是说,图像就无法显示了。如果level的值为10000,表示显示全部的图像(不进行任何截取)。本例将level设为3000,表示从左侧截取30%的图像。显示效果如图所示。