Android-Drawable(三)

Android-Drawable(三)

前两两篇文章已经学习了6个Drawable,接下来我们继续学习剩下的一些Drawable.

本章我们学习一下的Drawable

  1. InsetDrawable
  2. ClipDrawable
  3. RotateDrawable
  4. LevelListDrawable
  5. AnimationDrawable
  6. TransitionDrawable

Android系统的Drawable

1531877034399-57028efa-03d5-432d-977d-79ff5696ae5a.png | left | 693x394

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" />

image.png | left | 182x322

ClipDrawable

通过 ClipDrawable 我们可以裁剪Drawable。

ViewPagerImageRecycle.gif | left | 370x204

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的时候有两个需要注意的属性 clipOrientationgravity 其中clipOrientation代表的剪切的方向,gravity需要和clipOrientation 结合使用,通过gravity可以设置剪切的方式。比如说从两边到中间、从左到右等等,并且gravity 属性是可通过 | 操作符来多个共用的,gravity的详细信息如下。 图片来自《Android开发艺术探索》

image.png | left | 826x507

RotateDrawable

RotateDrawable可以将Drawable进行旋转操作,可以通过设置Level来控制旋转Level依然是 0-10000 之间的数

ViewPagerImageRecycle.gif | left | 370x204

<?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

ViewPagerImageRecycle.gif | left | 370x204
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之间平滑的切换--以淡入淡出的方式。

ViewPagerImageRecycle.gif | left | 370x204

<?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)
原文地址:https://www.cnblogs.com/slyfox/p/9330055.html