对于任何软件来说,美观的界面都是用户体验的重要组成部分,它能提高整个软件的品质,给用户一个好的印象。界面的美观一般离不开各种图形图像资源。本节就来讲一讲Android开发中图形图像处理的一个最重要的类Drawable。Drawable就是一个可以画的对象的抽象(有点别扭,你凑合看吧)。

       下面是它的继承关系,可以看到BitmapDrawable、AnimationDrawable等对象都是它的子类。

Drawable类的继承关系

       最简单的使用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中。

向sdcard中拷贝图片文件

       2、res\main.xml的内容如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LINEARLAYOUT xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">  
  3. <TEXTVIEW android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="Drawable的使用-设置壁纸" android:textsize="20sp" />  
  4. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="查看图片A" android:textsize="20sp" android:id="@+id/Button01">  
  5. </BUTTON>  
  6. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="查看图片B" android:textsize="20sp" android:id="@+id/Button02">  
  7. </BUTTON>  
  8. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="设置图片A为壁纸" android:textsize="20sp" android:id="@+id/Button03">  
  9. </BUTTON>  
  10. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="设置图片B为壁纸" android:textsize="20sp" android:id="@+id/Button04">  
  11. </BUTTON>  
  12. <BUTTON type=submit android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="恢复默认壁纸" android:textsize="20sp" android:id="@+id/Button05">  
  13. </BUTTON>  
  14. <IMAGEVIEW android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/ImageView01">  
  15. </IMAGEVIEW>  
  16. </LINEARLAYOUT>  

       3、MainDrawable.java的内容如下:

Java代码
  1. package android.basic.lesson23;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import android.app.Activity;   
  6. import android.graphics.BitmapFactory;   
  7. import android.graphics.drawable.Drawable;   
  8. import android.os.Bundle;   
  9. import android.view.View;   
  10. import android.view.View.OnClickListener;   
  11. import android.widget.Button;   
  12. import android.widget.ImageView;   
  13.   
  14. public class MainDrawable extends Activity {   
  15.     /** Called when the activity is first created. */  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(R.layout.main);   
  20.   
  21.         //定义UI组件   
  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);   
  28.   
  29.         //定义按钮点击监听器   
  30.         OnClickListener ocl = new OnClickListener() {   
  31.   
  32.             @Override  
  33.             public void onClick(View v) {   
  34.   
  35.                 switch (v.getId()) {   
  36.                 case R.id.Button01:   
  37.                     //给ImageView设置图片,从存储卡中获取图片为Drawable,然后把Drawable设置为ImageView的背景   
  38.                     iv.setBackgroundDrawable(Drawable.createFromPath("/sdcard/a.jpg"));   
  39.                     break;   
  40.                 case R.id.Button02:   
  41.                     iv.setBackgroundDrawable(Drawable.createFromPath("/sdcard/b.jpg"));   
  42.                     break;   
  43.                 case R.id.Button03:   
  44.                     try {   
  45.                         //Activity的父类ContextWrapper有这个setWallpaper方法,当然使用此方法需要有android.permission.SET_WALLPAPER权限   
  46.                         setWallpaper(BitmapFactory.decodeFile("/sdcard/a.jpg"));   
  47.                     } catch (IOException e1) {   
  48.                         e1.printStackTrace();   
  49.                     }   
  50.                     break;   
  51.                 case R.id.Button04:   
  52.                     try {   
  53.                         setWallpaper(BitmapFactory.decodeFile("/sdcard/b.jpg"));   
  54.                     } catch (IOException e1) {   
  55.                         e1.printStackTrace();   
  56.                     }   
  57.                     break;   
  58.                 case R.id.Button05:   
  59.                     try {   
  60.                         //Activity的父类ContextWrapper有这个clearWallpaper方法,作用是恢复默认壁纸,当然使用此方法需要有android.permission.SET_WALLPAPER权限   
  61.                         clearWallpaper();   
  62.                     } catch (IOException e) {   
  63.                         e.printStackTrace();   
  64.                     }   
  65.                     break;   
  66.                 }   
  67.   
  68.             }   
  69.   
  70.         };   
  71.   
  72.         //给按钮们绑定点击监听器   
  73.         b1.setOnClickListener(ocl);   
  74.         b2.setOnClickListener(ocl);   
  75.         b3.setOnClickListener(ocl);   
  76.         b4.setOnClickListener(ocl);   
  77.         b5.setOnClickListener(ocl);   
  78.     }   
  79.   
  80. }  

       4、AndroidManifest.xml的内容如下(设置权限):

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <MANIFEST android:versionname="1.0" android:versioncode="1" xmlns:android="http://schemas.android.com/apk/res/android" package="android.basic.lesson23">  
  3.     <APPLICATION android:icon="@drawable/icon" android:label="@string/app_name">  
  4.         <ACTIVITY android:name=".MainDrawable" android:label="@string/app_name">  
  5.             <INTENT -filter>  
  6.                 <ACTION android:name="android.intent.action.MAIN" />  
  7.                 <CATEGORY android:name="android.intent.category.LAUNCHER" />  
  8.             </INTENT>  
  9.         </ACTIVITY>  
  10.   
  11.     </APPLICATION>  
  12.     <USES android:minsdkversion="8" -sdk />  
  13.   
  14. <USES android:name="android.permission.SET_WALLPAPER" -permission></USES>  
  15. </MANIFEST>  

       5、运行程序,查看结果。

       点击“查看图片A”按钮,ImageView载入图片A并显示出来:

ImageView载入并显示图片

       点击“设置图片B为壁纸”按钮,可以看到图片B已经成为桌面壁纸:

设置图片为壁纸

       关于Drawable使用的内容就讲到这里了,大家可以自己多加练习,巩固一下这些知识。

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/course/168.html
2012年8月20日
发布:鸡啄米 分类:Android开发教程 浏览: 评论:2