zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    Spring Boot+Vue 项目前端_Vuejs环境搭建
    vue+element 数据表格分页
    vue+elementui 实现新增和修改共用一个弹框
    Vue删除数据成功后如何刷新表格数据
    vue中使用echart绑定点击事件进行路由切换
    Vue的生命周期
    添加访问量插件
    Docker部署的Gitlab平行迁移到另一台服务器上
    GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution【阅读笔记】
    Learning Continuous Image Representation with Local Implicit Image Function【阅读笔记】
  • 原文地址:https://www.cnblogs.com/slyfox/p/9330055.html
Copyright © 2011-2022 走看看