登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 1096071|回复: 142

第二十三讲:Drawable使用入门

  [复制链接]

58

主题

58

帖子

130

安币

程序猿

Rank: 2

发表于 2011-4-24 20:45:13 | 显示全部楼层 |阅读模式
本讲内容: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的内容如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
  3. <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:textsize="20sp" android:text="Drawable的使用-设置壁纸">
  4. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="查看图片A" android:id="@+id/Button01">
  5. </button>
  6. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="查看图片B" android:id="@+id/Button02">
  7. </button>
  8. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="设置图片A为壁纸" android:id="@+id/Button03">
  9. </button>
  10. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="设置图片B为壁纸" android:id="@+id/Button04">
  11. </button>
  12. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="恢复默认壁纸" android:id="@+id/Button05">
  13. </button>
  14. <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ImageView01">
  15. </imageview>
  16. </textview></linearlayout>
复制代码
3、MainDrawable.java的内容如下:
  1. package android.basic.lesson23;

  2. import java.io.IOException;

  3. import android.app.Activity;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.drawable.Drawable;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.ImageView;

  11. public class MainDrawable extends Activity {
  12.         /** Called when the activity is first created. */
  13.         @Override
  14.         public void onCreate(Bundle savedInstanceState) {
  15.                 super.onCreate(savedInstanceState);
  16.                 setContentView(R.layout.main);

  17.                 //定义UI组件
  18.                 Button b1 = (Button) findViewById(R.id.Button01);
  19.                 Button b2 = (Button) findViewById(R.id.Button02);
  20.                 Button b3 = (Button) findViewById(R.id.Button03);
  21.                 Button b4 = (Button) findViewById(R.id.Button04);
  22.                 Button b5 = (Button) findViewById(R.id.Button05);
  23.                 final ImageView iv= (ImageView)findViewById(R.id.ImageView01);

  24.                 //定义按钮点击监听器
  25.                 OnClickListener ocl = new OnClickListener() {

  26.                         @Override
  27.                         public void onClick(View v) {

  28.                                 switch (v.getId()) {
  29.                                 case R.id.Button01:
  30.                                         //给ImageView设置图片,从存储卡中获取图片为Drawable,然后把Drawable设置为ImageView的背景
  31.                                         iv.setBackgroundDrawable(Drawable.createFromPath("/sdcard/a.jpg"));
  32.                                         break;
  33.                                 case R.id.Button02:
  34.                                         iv.setBackgroundDrawable(Drawable.createFromPath("/sdcard/b.jpg"));
  35.                                         break;
  36.                                 case R.id.Button03:
  37.                                         try {
  38.                                                 //Activity的父类ContextWrapper有这个setWallpaper方法,当然使用此方法需要有android.permission.SET_WALLPAPER权限
  39.                                                 setWallpaper(BitmapFactory.decodeFile("/sdcard/a.jpg"));
  40.                                         } catch (IOException e1) {
  41.                                                 e1.printStackTrace();
  42.                                         }
  43.                                         break;
  44.                                 case R.id.Button04:
  45.                                         try {
  46.                                                 setWallpaper(BitmapFactory.decodeFile("/sdcard/b.jpg"));
  47.                                         } catch (IOException e1) {
  48.                                                 e1.printStackTrace();
  49.                                         }
  50.                                         break;
  51.                                 case R.id.Button05:
  52.                                         try {
  53.                                                 //Activity的父类ContextWrapper有这个clearWallpaper方法,作用是恢复默认壁纸,当然使用此方法需要有android.permission.SET_WALLPAPER权限
  54.                                                 clearWallpaper();
  55.                                         } catch (IOException e) {
  56.                                                 e.printStackTrace();
  57.                                         }
  58.                                         break;
  59.                                 }

  60.                         }

  61.                 };

  62.                 //给按钮们绑定点击监听器
  63.                 b1.setOnClickListener(ocl);
  64.                 b2.setOnClickListener(ocl);
  65.                 b3.setOnClickListener(ocl);
  66.                 b4.setOnClickListener(ocl);
  67.                 b5.setOnClickListener(ocl);
  68.         }

  69. }
复制代码
4、AndroidManifest.xml的内容如下(设置权限):
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.basic.lesson23" android:versioncode="1" android:versionname="1.0">
  3.     <application android:icon="@drawable/icon" android:label="@string/app_name">
  4.         <activity android:label="@string/app_name" android:name=".MainDrawable">
  5.             <intent -filter="">
  6.                 <action android:name="android.intent.action.MAIN">
  7.                 <category android:name="android.intent.category.LAUNCHER">
  8.             </category></action></intent>
  9.         </activity>

  10.     </application>
  11.     <uses -sdk="" android:minsdkversion="8">

  12. <uses -permission="" android:name="android.permission.SET_WALLPAPER"></uses>
  13. </uses></manifest>
复制代码
5、运行程序,查看结果:
点击“查看图片A”按钮,ImageView载入图片A并显示出来
点击”设置图片B为壁纸”按钮,可以看到图片B已经成为桌面壁纸。 好了本讲就到这里。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

8

帖子

19

安币

初级码农

Rank: 1

发表于 2011-7-29 18:45:07 | 显示全部楼层
多谢楼主。。。。又学到东西

3

主题

98

帖子

22

安币

程序猿

Rank: 2

发表于 2011-8-20 13:14:14 | 显示全部楼层
学习了

1

主题

182

帖子

73

安币

程序猿

Rank: 2

发表于 2011-9-21 13:02:47 | 显示全部楼层
多谢,好东西

0

主题

47

帖子

35

安币

程序猿

Rank: 2

发表于 2011-10-24 23:24:11 | 显示全部楼层
多谢楼主。。。。又学到东西

主题

帖子

安币

游客

发表于 2011-11-9 09:48:28 | 显示全部楼层
楼主威武!!!!!!

0

主题

74

帖子

133

安币

程序猿

Rank: 2

QQ达人

发表于 2011-11-25 16:41:24 | 显示全部楼层
学习啦,赞一个

0

主题

15

帖子

9

安币

初级码农

Rank: 1

发表于 2011-11-27 12:58:47 | 显示全部楼层
这个威武了,又学习了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表