Android中Drawable分类汇总(下)
来源:互联网 发布:java和golang 编辑:程序博客网 时间:2024/06/16 01:29
转载 http://www.devdiv.com/forum.php?mod=viewthread&tid=126942
七、ScaleDrawable
ScaleDrawable是对一个Drawable进行缩放操作,可以根据level属性控制这个drawable的缩放比率,也可以设置它在容器中的对齐方式。
在xml文件中使用scale作为根节点来创建RotateDrawable。
创建ScaleDrawable的代码如下:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<!-- android:scaleGravity=""可以设置缩放的对齐方式 -->
3
<
scale
xmlns:android
=
"http://schemas.android.com/apk/res/android"
4
android:drawable
=
"@drawable/smiley_smile"
5
android:scaleWidth
=
"100%"
6
android:scaleHeight
=
"100%"
7
>
8
9
</
scale
>
效果如下图所示:
图6-10 ScaleDrawable运行效果图
八、 RotateDrawable
RotateDrawable 是对一个Drawable进行旋转操作,可以根据level属性控制这个drawable旋转角度,也可以设置相对于它所在容器的对齐方式。
在xml文件中使用rotate作为根节点来定义RotateDrawable.
创建RotateDrawable的代码如下:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
rotate
xmlns:android
=
"http://schemas.android.com/apk/res/android"
3
android:drawable
=
"@drawable/smiley_smile"
4
android:pivotX
=
"50%"
5
android:pivotY
=
"50%"
6
>
7
8
9
</
rotate
>
效果如下图所示:
图6-11 RotateDrawable运行效果图
九、AnimationDrawable
AnimationDrawable 对应于Android中的帧动画,就是把一系列的drawable按照一定的顺序,一帧一帧的播放,并且可以使用android:oneshot属性设置是否循环播放。
在xml文件中使用animation-list作为根节点定义AnimationDrawable,使用item设置需要播放的每一帧使用的drawable资源,以及每一帧持续的时常。
下面的代码定义了一个包含五帧的AnimationDrawable,帧间隔为300毫秒,代码如下:
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
animation-list
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03
android:oneshot
=
"false"
>
04
<
item
05
android:drawable
=
"@drawable/level1"
06
android:duration
=
"300"
07
/>
08
<
item
09
android:drawable
=
"@drawable/level2"
10
android:duration
=
"300"
11
/>
12
<
item
13
android:drawable
=
"@drawable/level3"
14
android:duration
=
"300"
15
/>
16
<
item
17
android:drawable
=
"@drawable/level4"
18
android:duration
=
"300"
19
/>
20
<
item
21
android:drawable
=
"@drawable/level5"
22
android:duration
=
"300"
23
/>
24
</
animation-list
>
定义了AnimationDrawable之后需要主动调用AnimationDrawable的start播放动画,需要注意的是,当我们在Activity的oncreate方法中调用start方法时会没有任何效果,那是因
为view还没有初始化完成,无法播放动画,所以需要使用handler来延迟播放动画,具体实现代码如下:
1
mHandler.postDelayed(
new
Runnable() {
2
3
@Override
4
public
void
run() {
5
// TODO Auto-generated method stub
6
((AnimationDrawable)mDrawable).start();
7
8
}
9
},
1000
);
十、LayerDrawable
LayerDrawable 管理一组drawable,每个drawable都处于不同的层,当它们被绘制的时候,按照顺序全部都绘制到画布上。虽然这些drawable会有交差或者重叠的区域,但是它们是位于不同的层,彼此之间不会影响。
在xml文件中使用layer-list作为根节点来定义LayerDrawable,通过item子节点定义每一层的drawable,layer-list没有属性节点,只包含item子节点。
下面的xml定义了一个包含三层的LayerDrawable,为了清楚的看到它们分别位于不同的层,可以给每一层都设置了一些透明度,代码如下:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
layer-list
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
3
<
item
android:drawable
=
"@drawable/layer1"
/>
4
<
item
android:drawable
=
"@drawable/layer2"
/>
5
<
item
android:drawable
=
"@drawable/layer3"
/>
6
</
layer-list
>
效果如下图所示:
图6-12 LayerDrawable运行效果图
十一、LevelListDrawable
管理一组drawable,每一个drawable都对应一个level范围,当它们被绘制的时候,根据level属性值选取对应的一个drawable绘制到画布上。
在xml文件中使用level-list作为根节点来定义LevelListDrawable,通过item子节点定义每一层的drawable,level-list没有属性节点,只包含item子节点。
创建LevelListDrawable的代码如下:
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
level-list
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
03
04
<
item
05
android:maxLevel
=
"2000"
06
android:drawable
=
"@drawable/level1"
/>
07
<
item
08
android:maxLevel
=
"4000"
09
android:drawable
=
"@drawable/level2"
/>
10
<
item
11
android:maxLevel
=
"6000"
12
android:drawable
=
"@drawable/level3"
/>
13
<
item
14
android:maxLevel
=
"8000"
15
android:drawable
=
"@drawable/level4"
/>
16
<
item
17
android:maxLevel
=
"10000"
18
android:drawable
=
"@drawable/level5"
/>
19
20
</
level-list
>
效果如下图所示:
图6-13 LevelListDrawable运行效果图1
图6-14 LevelListDrawable运行效果图2
十二、StateListDrawable
StateListDrawable管理一组drawable,每一个drawable都对应着一组状态,状态的选择类似于java中的switch-case组合,按照顺序比较状态,当遇到匹配的状态后,就返回对应的drawable,因此需要把最精确的匹配放置在最前面,按照从精确到粗略的顺序排列。
StateListDrawable在Android中使用的非常广泛,所有控件的背景基本上都使用了StateListDrawable,比如按钮就具有很多状态,按下状态、选中状态、默认状态、禁用状态等等,像这样在不用的状态下显示效果不一样的时候,就是需要使用StateListDrawable的时候。
在xml文件中使用selector作为根节点来定义StateListDrawable,并使用item定义不同状态下的drawable。
创建StateListDraw的代码如下:
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
selector
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
03
<
item
android:state_focused
=
"false"
04
android:state_pressed
=
"false"
05
android:drawable
=
"@drawable/gradient_normal"
06
/>
07
08
<
item
android:state_pressed
=
"true"
09
android:drawable
=
"@drawable/gradient_pressed"
10
/>
11
12
<
item
android:state_focused
=
"true"
13
android:drawable
=
"@drawable/gradient_focused"
14
/>
15
16
</
selector
>
效果如下图所示:
图6-15 Normal状态下StateListDrawable运行效果图
图6-16 Focused状态下StateListDrawable运行效果图
图6-17 Pressed状态下StateListDrawable运行效果图
十三、TransitionDrawable
TransitionDrawable 是LayerDrawable的子类,不过它只负责管理两层drawable,并且提供了一个透明度变化的动画,可以控制从一层drawable过度到另外一层drawable的动画效果。
在xml文件中使用transition作为根节点来定义TransitionDrawable,通过item子节点定义两层使用的drawable。
创建TransitionDrawable的代码如下:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
transition
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
3
<
item
android:drawable
=
"@drawable/smiley_smile"
/>
4
<
item
android:drawable
=
"@drawable/smiley_smile_glasses"
/>
5
6
</
transition
>
在使用AnimationDrawable的时,需要主动调用startTransition方法启动两个层之间的切换动画,也可以调用reverseTransition方法启动逆向切换动画,它们都可以接受一个毫秒
数,作为动画的持续时间。代码如下:
1
mHandler.postDelayed(
new
Runnable() {
2
3
@Override
4
public
void
run() {
5
// TODO Auto-generated method stub
6
((TransitionDrawable)mDrawable).startTransition(
2000
);
7
}
8
},
1000
);
效果如下图所示:
图6-18 TransitionDrawable运行效果图1
图6-19 TransitionDrawable运行效果图2
0 0
- Android中Drawable分类汇总(下)
- Android中Drawable分类汇总(下)
- Android中Drawable分类汇总
- Android中Drawable分类汇总(上)
- Android中Drawable分类汇总详解
- Android中Drawable分类汇总(上)
- Android中Drawable分类汇总(上)
- Android中Drawable分类汇总详解
- android中drawable的分类
- 我的Android进阶之旅------>Android中Drawable分类汇总详解
- 我的Android进阶之旅------>Android中Drawable分类汇总详解
- Android 样式开发:Drawable分类资源汇总详解(一)
- Android:drawable汇总
- android drawable下自定义的xml文件各种形式汇总
- Android UI集锦——1.Android Drawable分类汇总(1/3)
- Android UI集锦——1.Android Drawable分类汇总(2/3)
- Android UI集锦——1.Android Drawable分类汇总(3/3)
- android 项目分类汇总
- shell编程基础(5)---循环指令
- Linux下的UDP通信
- 【Hadoop】MAC下hadoop2.6安装以及执行wordcount
- 日经社説 20150513 「集中期間」後も着実な復興を
- 在ASP.NET MVC3 中利用JSONP跨域登录WEB系统
- Android中Drawable分类汇总(下)
- hibernate和ibatis的区别
- 关于HIVE数据仓库的基本操作
- spring基础知识随笔
- 日经社説 20150513 ネットのプライバシー保護は複眼的に
- No drawer view found with gravity LEFT
- C#.Net调用非托管的DLL
- project Euler problem13
- C# DataSet转化为List<string[]>