本讲内容:Drawable及其相关类的使用
一个让人赏心悦目的界面对软件来说非常重要,因此图形图像资源也显得非常重要。本讲就要谈一谈Android中处理图形图像的最重要的一个类Drawable。Drawable就是一个可以画的对象的抽象(有点别扭,你凑合看吧),下面是它的继承关系,可以看到BitmapDrawable,AnimationDrawable等对象都是它的子类。
最简单的使用Drawable资源的方法是,把图片放入Android工程的res\drawable目录下,编程环境会自动在R类里为此资源创建一个引用。你可以使用此引用访问该资源对象。譬如对应用程序的图标,在Java代码中可以用R.drawable.icon引用到它,在XML中可以用@drawable/icon引用到它。
那么如果图片资源不在项目中而是在SDCard中时如何使用呢,我们看一下下面的例子学习一下Drawable的使用,并且顺便学习一下Bitmap和BitmapFactory的使用。
1、创建项目 Lesson23_Drawable,主Acitivity的名字是 MainDrawable.java,拷贝a.jpg和b.jpg两个文件到sdcard中
2、res\main.xml的内容如下:
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
03 | < TEXTVIEW android:layout_height = "wrap_content" android:layout_width = "fill_parent" android:text = "Drawable的使用-设置壁纸" android:textsize = "20sp" /> |
04 | < BUTTON type = submit android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:text = "查看图片A" android:textsize = "20sp" android:id = "@+id/Button01" > |
06 | < BUTTON type = submit android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:text = "查看图片B" android:textsize = "20sp" android:id = "@+id/Button02" > |
08 | < BUTTON type = submit android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:text = "设置图片A为壁纸" android:textsize = "20sp" android:id = "@+id/Button03" > |
10 | < BUTTON type = submit android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:text = "设置图片B为壁纸" android:textsize = "20sp" android:id = "@+id/Button04" > |
12 | < BUTTON type = submit android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:text = "恢复默认壁纸" android:textsize = "20sp" android:id = "@+id/Button05" > |
14 | < IMAGEVIEW android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/ImageView01" > |
3、MainDrawable.java的内容如下:
01 | package android.basic.lesson23; |
03 | import java.io.IOException; |
05 | import android.app.Activity; |
06 | import android.graphics.BitmapFactory; |
07 | import android.graphics.drawable.Drawable; |
08 | import android.os.Bundle; |
09 | import android.view.View; |
10 | import android.view.View.OnClickListener; |
11 | import android.widget.Button; |
12 | import android.widget.ImageView; |
14 | public class MainDrawable extends Activity { |
15 | /** Called when the activity is first created. */ |
17 | public void onCreate(Bundle savedInstanceState) { |
18 | super .onCreate(savedInstanceState); |
19 | setContentView(R.layout.main); |
22 | Button b1 = (Button) findViewById(R.id.Button01); |
23 | Button b2 = (Button) findViewById(R.id.Button02); |
24 | Button b3 = (Button) findViewById(R.id.Button03); |
25 | Button b4 = (Button) findViewById(R.id.Button04); |
26 | Button b5 = (Button) findViewById(R.id.Button05); |
27 | final ImageView iv= (ImageView)findViewById(R.id.ImageView01); |
30 | OnClickListener ocl = new OnClickListener() { |
33 | public void onClick(View v) { |
38 | iv.setBackgroundDrawable(Drawable.createFromPath( "/sdcard/a.jpg" )); |
41 | iv.setBackgroundDrawable(Drawable.createFromPath( "/sdcard/b.jpg" )); |
46 | setWallpaper(BitmapFactory.decodeFile( "/sdcard/a.jpg" )); |
47 | } catch (IOException e1) { |
53 | setWallpaper(BitmapFactory.decodeFile( "/sdcard/b.jpg" )); |
54 | } catch (IOException e1) { |
62 | } catch (IOException e) { |
73 | b1.setOnClickListener(ocl); |
74 | b2.setOnClickListener(ocl); |
75 | b3.setOnClickListener(ocl); |
76 | b4.setOnClickListener(ocl); |
77 | b5.setOnClickListener(ocl); |
4、AndroidManifest.xml的内容如下(设置权限):
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
03 | < APPLICATION android:label = "@string/app_name" android:icon = "@drawable/icon" > |
04 | < ACTIVITY android:label = "@string/app_name" android:name = ".MainDrawable" > |
06 | < ACTION android:name = "android.intent.action.MAIN" /> |
07 | < CATEGORY android:name = "android.intent.category.LAUNCHER" /> |
12 | < USES android:minsdkversion = "8" -sdk /> |
14 | < USES android:name = "android.permission.SET_WALLPAPER" -permission></ USES > |
5、运行程序,查看结果:
点击“查看图片A”按钮,ImageView载入图片A并显示出来
点击”设置图片B为壁纸”按钮,可以看到图片B已经成为桌面壁纸。