Android-Drawable(三)
Android-Drawable(三)
前两两篇文章已经学习了6个Drawable,接下来我们继续学习剩下的一些Drawable.
本章我们学习一下的Drawable
- InsetDrawable
- ClipDrawable
- RotateDrawable
- LevelListDrawable
- AnimationDrawable
- TransitionDrawable
Android系统的Drawable
InsetDrawable
有时候为View设置了一个Drawable,我们并不想让Drawable填充满整个View,这时候我们就可以使用 InsertDrawable
来使Drawable与View之间有一些间隔即Drawable和View之间的内间距。
<!--可以统一设置内间距,也可以分别设置-->
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/wallpaper"
android:inset="10dp" />
ClipDrawable
通过 ClipDrawable
我们可以裁剪Drawable。
ClipDrawable
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@drawable/pet9"
android:gravity="center" />
代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
clipSB.max = 10000
clipSB.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onStartTrackingTouch(seekBar: SeekBar?) {}
override fun onStopTrackingTouch(seekBar: SeekBar?) {}
override fun onProgressChanged
(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
var clip = petIV.drawable as ClipDrawable
clip.setLevel(clipSB.progress)
}
})
}
在实现功能的代码中我们调用了一个 setLevel
方法,Level属性代表的是被裁剪的程度,0是完全裁剪了 drawable不可见,10000 是最大值,代表Drawable完全可见。
在声明 Clipdrawable的时候有两个需要注意的属性 clipOrientation
和 gravity
其中clipOrientation代表的剪切的方向,gravity需要和clipOrientation 结合使用,通过gravity可以设置剪切的方式。比如说从两边到中间、从左到右等等,并且gravity 属性是可通过 |
操作符来多个共用的,gravity的详细信息如下。 图片来自《Android开发艺术探索》
RotateDrawable
RotateDrawable可以将Drawable进行旋转操作,可以通过设置Level来控制旋转Level依然是 0-10000 之间的数
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/pet9"
android:fromDegrees="-90"
android:pivotX="50%"
android:pivotY="50%"
android:visible="true" />
RotateDrawable属性详解
- Drawable 设置Drawable
- fromDegrees 开始的角度
- toDegrees 结束的角度
- pivotX 旋转的轴心的X轴的位置,是一个百分数,默认为50%
- pivotY 旋转的轴心的Y轴的位置,是一个百分数,默认为50%
- isable Drawable是否可见
LevelListDrawable
Level
ListDrawable会根据不同的Level来提供不同的Drawable。 同样是通过Level来设置,系统会根据Level来判断最适合的区间。
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/pet9"
android:maxLevel="1000"
android:minLevel="0" />
<item
android:drawable="@drawable/dog"
android:maxLevel="5000"
android:minLevel="1001" />
<item
android:drawable="@drawable/nopicture"
android:maxLevel="10000"
android:minLevel="5001" />
</level-list>
AnimationDrawable
帧动画,也算是一种Drawable。每一个item 表示动画的一帧,duration表示这一帧持续的时间。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/frame1" android:duration="100"/>
<item android:drawable="@drawable/frame2" android:duration="100"/>
<item android:drawable="@drawable/frame3" android:duration="100"/>
<item android:drawable="@drawable/frame4" android:duration="100"/>
<item android:drawable="@drawable/frame5" android:duration="100"/>
<item android:drawable="@drawable/frame6" android:duration="100"/>
<item android:drawable="@drawable/frame7" android:duration="100"/>
<item android:drawable="@drawable/frame8" android:duration="100"/>
<item android:drawable="@drawable/frame9" android:duration="100"/>
<item android:drawable="@drawable/frame10" android:duration="100"/>
<item android:drawable="@drawable/frame11" android:duration="100"/>
<item android:drawable="@drawable/frame12" android:duration="100"/>
</animation-list>
TransitionDrawable
TransitionDrawable可以在__两个__Drawable之间平滑的切换--以淡入淡出的方式。
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/dog" />
<item android:drawable="@drawable/pet9" />
</transition>
开始播放
var td = this.petIV.drawable as TransitionDrawable
//设置两个Drawable转换的时间
td.startTransition(3000)
//反过来切换-先显示第二张再显示第一张
//td.reverseTransition(3000)