原文:

 

Android Drawable的9种子类 介绍

 

 

 

Drawable 在android里面 就是代表着图像,注意是图像 而不是图片。 图片是图像的子集。图像除了可以包含图片以外 还可以包含颜色。

换句话说Drawble就是canvas 可以绘制的 一种概念。 android 系统自带了很多种drawable。我们最好对自带的drawable 有一种比较熟悉的了解,

这样对我们apk开发很有好处,因为drawable使用 非常简单 基本上就是xml编写 即可。比你自己自定义view的成本要低的多。

而且非图片类型的drawable 占用控件也小,有助于我们减少apk的体积。

 

1.BitmapDrawable

这个用的人很多,不多做介绍了,唯一要注意的就是 下面这个参数 总共3种,3种参数分别对应哪些效果 要搞清楚。

1 <?xml version="1.0" encoding="utf-8"?>
2 <!--android:tileMode 3种参数 repeat clamp和mirror 的区别要搞清楚-->
3 <bitmap xmlns:andro
4     android:src="@mipmap/shuqi"
5     android:tileMode="repeat">
6 
7 </bitmap>

 

 

repeat的效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

mirror:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

clamp的效果就不放了,因为这种效果 我自己也没实际用过,觉得挺2的。。 有兴趣的可以自己玩一下

 

2.ShapeDrawable

这个熟悉的人也应该很多 我们通常用来做editext 背景图时的那些 圆角啊  尖角之类的。可以省去ui不少功夫,程序员自己就能搞定了

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:andro
 3     android:shape="rectangle">
 4     <corners android:radius="10dp"></corners>
 5     <gradient
 6         android:angle="45"
 7         android:endColor="#FFFF0000"
 8         android:startColor="#FFFF0000" />
 9     <padding
10         android:bottom="10dp"
11         android:left="10dp"
12         android:right="10dp"
13         android:top="10dp" />
14     <stroke
15         android:width="2dp"
16         android:color="#dcdcdc" />
17     <solid android:color="#ffff9d77" />
18 </shape>

 

效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

3.layerDrawable

这个用的人就不多了,实际上就是 后面的item 会覆盖掉前面的item 能做出那种层次化的显示效果。比如微信的输入框 背景就是这么做的。

 

 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:andro>
 3     <item>
 4         <shape android:shape="rectangle">
 5             <solid android:color="#0ac39e"></solid>
 6         </shape>
 7     </item>
 8 
 9     <item android:bottom="6dp">
10         <shape android:shape="rectangle">
11             <solid android:color="#ffffff"></solid>
12         </shape>
13     </item>
14 
15     <item
16         android:bottom="1dp"
17         android:left="1dp"
18         android:right="1dp">
19         <shape android:shape="rectangle">
20             <solid android:color="#ffffff"></solid>
21         </shape>
22     </item>
23 
24 
25 </layer-list>

 

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

4.StateListDrawable

这个例子就不给了,我们天天都在用的 selector 就是他。反应view 状态变化的。

 

5.LeverListDrawable
这个就是可以通过简单的java代码setImageLevel以后 就可以自动的切换图片。android的电量 变化 就是用这个做的,

我写一个简单的例子 大家可以感受一下。假设我们的需求是每隔500ms 切换一次图片背景。

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <level-list xmlns:andro>
 3 
 4     <item
 5         android:drawable="@drawable/ic_accessible_black_18dp"
 6         android:maxLevel="0"></item>
 7     <item
 8         android:drawable="@drawable/ic_account_circle_black_18dp"
 9         android:maxLevel="1"></item>
10     <item
11         android:drawable="@drawable/ic_account_balance_wallet_black_18dp"
12         android:maxLevel="2"></item>
13     <item
14         android:drawable="@drawable/ic_aspect_ratio_black_18dp"
15         android:maxLevel="3"></item>
16     <item
17         android:drawable="@drawable/ic_book_black_18dp"
18         android:maxLevel="4"></item>
19 
20 </level-list>
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

java代码:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1  iv = (ImageView) findViewById(R.id.iv);
 2         iv.setOnClickListener(new View.OnClickListener() {
 3 
 4             @Override
 5             public void onClick(View v) {
 6                 new Thread() {
 7 
 8                     @Override
 9                     public void run() {
10                         for (int i = 0; i < 5; i++) {
11                             final int ii = i;
12                             try {
13                                 sleep(500);
14                             } catch (InterruptedException e) {
15                                 e.printStackTrace();
16                             }
17 
18                             runOnUiThread(new Runnable() {
19                                 @Override
20                                 public void run() {
21                                     iv.setImageLevel(ii);
22                                 }
23                             });
24 
25                             if (i == 4) {
26                                 i = -1;
27                             }
28                         }
29                     }
30                 }.start();
31             }
32         });
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

效果如下:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

用这个drawable就可以省去 我们在java代码里 写那么多set。。。多方便。

 

6.TransitionDrawable

这个就特别赞了,就是一个渐入渐出的效果。非常方便。你要是还在set alpha什么的那就弱爆了。

1 <?xml version="1.0" encoding="utf-8"?>
2 <transition xmlns:andro>
3     <item android:drawable="@mipmap/shuqi"></item>
4     <item android:drawable="@mipmap/shuqi2"></item>
5 </transition>

java代码:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1 iv = (ImageView) findViewById(R.id.iv);
 2         iv.setOnClickListener(new View.OnClickListener() {
 3 
 4             @Override
 5             public void onClick(View v) {
 6                 TransitionDrawable td=(TransitionDrawable)iv.getBackground();
 7                 td.startTransition(1000);
 8                 //反过来也是可以的
 9                // td.reverseTransition(1000);
10             }
11         });
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

7 InsetDrawable

一般希望背景比自己实际区域小的时候 用这个

 View Code

 效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

8.ScaleDrawable

这个跟level有点像,就是可以直接缩放图片的

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
1 <?xml version="1.0" encoding="utf-8"?>
2 <scale xmlns:andro
3     android:drawable="@mipmap/shuqi"
4     android:scaleHeight="70%"
5     android:scaleGravity="center"
6     >
7 </scale>
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
1    iv = (ImageView) findViewById(R.id.iv);
2         //下面的不能漏掉 因为level默认是0 就显示不出来了
3         ScaleDrawable scaleDrawable=(ScaleDrawable)iv.getBackground();
4         scaleDrawable.setLevel(1);

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

9.ClipDrawable

其实和leveldrawable scaleDrawable都挺像的,只不过这个是用来裁剪drawable的。

可以灵活的设置裁剪的方向 角度等等。

demo就不写了和上面的差不多,可以自己写一个试试。

Drawable 在android里面 就是代表着图像,注意是图像 而不是图片。 图片是图像的子集。图像除了可以包含图片以外 还可以包含颜色。

换句话说Drawble就是canvas 可以绘制的 一种概念。 android 系统自带了很多种drawable。我们最好对自带的drawable 有一种比较熟悉的了解,

这样对我们apk开发很有好处,因为drawable使用 非常简单 基本上就是xml编写 即可。比你自己自定义view的成本要低的多。

而且非图片类型的drawable 占用控件也小,有助于我们减少apk的体积。

 

1.BitmapDrawable

这个用的人很多,不多做介绍了,唯一要注意的就是 下面这个参数 总共3种,3种参数分别对应哪些效果 要搞清楚。

1 <?xml version="1.0" encoding="utf-8"?>
2 <!--android:tileMode 3种参数 repeat clamp和mirror 的区别要搞清楚-->
3 <bitmap xmlns:andro
4     android:src="@mipmap/shuqi"
5     android:tileMode="repeat">
6 
7 </bitmap>

 

 

repeat的效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

mirror:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

clamp的效果就不放了,因为这种效果 我自己也没实际用过,觉得挺2的。。 有兴趣的可以自己玩一下

 

2.ShapeDrawable

这个熟悉的人也应该很多 我们通常用来做editext 背景图时的那些 圆角啊  尖角之类的。可以省去ui不少功夫,程序员自己就能搞定了

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:andro
 3     android:shape="rectangle">
 4     <corners android:radius="10dp"></corners>
 5     <gradient
 6         android:angle="45"
 7         android:endColor="#FFFF0000"
 8         android:startColor="#FFFF0000" />
 9     <padding
10         android:bottom="10dp"
11         android:left="10dp"
12         android:right="10dp"
13         android:top="10dp" />
14     <stroke
15         android:width="2dp"
16         android:color="#dcdcdc" />
17     <solid android:color="#ffff9d77" />
18 </shape>

 

效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

3.layerDrawable

这个用的人就不多了,实际上就是 后面的item 会覆盖掉前面的item 能做出那种层次化的显示效果。比如微信的输入框 背景就是这么做的。

 

 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:andro>
 3     <item>
 4         <shape android:shape="rectangle">
 5             <solid android:color="#0ac39e"></solid>
 6         </shape>
 7     </item>
 8 
 9     <item android:bottom="6dp">
10         <shape android:shape="rectangle">
11             <solid android:color="#ffffff"></solid>
12         </shape>
13     </item>
14 
15     <item
16         android:bottom="1dp"
17         android:left="1dp"
18         android:right="1dp">
19         <shape android:shape="rectangle">
20             <solid android:color="#ffffff"></solid>
21         </shape>
22     </item>
23 
24 
25 </layer-list>

 

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

4.StateListDrawable

这个例子就不给了,我们天天都在用的 selector 就是他。反应view 状态变化的。

 

5.LeverListDrawable
这个就是可以通过简单的java代码setImageLevel以后 就可以自动的切换图片。android的电量 变化 就是用这个做的,

我写一个简单的例子 大家可以感受一下。假设我们的需求是每隔500ms 切换一次图片背景。

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <level-list xmlns:andro>
 3 
 4     <item
 5         android:drawable="@drawable/ic_accessible_black_18dp"
 6         android:maxLevel="0"></item>
 7     <item
 8         android:drawable="@drawable/ic_account_circle_black_18dp"
 9         android:maxLevel="1"></item>
10     <item
11         android:drawable="@drawable/ic_account_balance_wallet_black_18dp"
12         android:maxLevel="2"></item>
13     <item
14         android:drawable="@drawable/ic_aspect_ratio_black_18dp"
15         android:maxLevel="3"></item>
16     <item
17         android:drawable="@drawable/ic_book_black_18dp"
18         android:maxLevel="4"></item>
19 
20 </level-list>
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

java代码:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1  iv = (ImageView) findViewById(R.id.iv);
 2         iv.setOnClickListener(new View.OnClickListener() {
 3 
 4             @Override
 5             public void onClick(View v) {
 6                 new Thread() {
 7 
 8                     @Override
 9                     public void run() {
10                         for (int i = 0; i < 5; i++) {
11                             final int ii = i;
12                             try {
13                                 sleep(500);
14                             } catch (InterruptedException e) {
15                                 e.printStackTrace();
16                             }
17 
18                             runOnUiThread(new Runnable() {
19                                 @Override
20                                 public void run() {
21                                     iv.setImageLevel(ii);
22                                 }
23                             });
24 
25                             if (i == 4) {
26                                 i = -1;
27                             }
28                         }
29                     }
30                 }.start();
31             }
32         });
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

效果如下:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

用这个drawable就可以省去 我们在java代码里 写那么多set。。。多方便。

 

6.TransitionDrawable

这个就特别赞了,就是一个渐入渐出的效果。非常方便。你要是还在set alpha什么的那就弱爆了。

1 <?xml version="1.0" encoding="utf-8"?>
2 <transition xmlns:andro>
3     <item android:drawable="@mipmap/shuqi"></item>
4     <item android:drawable="@mipmap/shuqi2"></item>
5 </transition>

java代码:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
 1 iv = (ImageView) findViewById(R.id.iv);
 2         iv.setOnClickListener(new View.OnClickListener() {
 3 
 4             @Override
 5             public void onClick(View v) {
 6                 TransitionDrawable td=(TransitionDrawable)iv.getBackground();
 7                 td.startTransition(1000);
 8                 //反过来也是可以的
 9                // td.reverseTransition(1000);
10             }
11         });
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

7 InsetDrawable

一般希望背景比自己实际区域小的时候 用这个

 View Code

 效果:

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

8.ScaleDrawable

这个跟level有点像,就是可以直接缩放图片的

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
1 <?xml version="1.0" encoding="utf-8"?>
2 <scale xmlns:andro
3     android:drawable="@mipmap/shuqi"
4     android:scaleHeight="70%"
5     android:scaleGravity="center"
6     >
7 </scale>
Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍
1    iv = (ImageView) findViewById(R.id.iv);
2         //下面的不能漏掉 因为level默认是0 就显示不出来了
3         ScaleDrawable scaleDrawable=(ScaleDrawable)iv.getBackground();
4         scaleDrawable.setLevel(1);

Android Drawable的9种子类 介绍
    


            
 
Android Drawable的9种子类 介绍

 

9.ClipDrawable

其实和leveldrawable scaleDrawable都挺像的,只不过这个是用来裁剪drawable的。

可以灵活的设置裁剪的方向 角度等等。

demo就不写了和上面的差不多,可以自己写一个试试。

相关文章:

  • 2021-12-29
  • 2021-11-15
  • 2021-12-02
  • 2021-05-30
  • 2022-12-23
  • 2021-11-23
  • 2021-09-28
猜你喜欢
  • 2021-05-14
  • 2021-05-22
  • 2021-09-12
  • 2021-08-15
  • 2022-12-23
  • 2021-07-18
相关资源
相似解决方案