Android自定义Switch

前言

由于最近需要实现一个自定义的switch,本想写一个MySwitch继承Switch来进行自定义,但是后来发现其实只需要通过定义switch的thumb和track的图片来达到自定义switch样式的目的。

关闭样式.jpeg
开启样式.jpeg

实现

1.定义track

track即滑动的轨道。

在res/drawable内先定义一个轨道关闭状态的drawable,switch_gray_track.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- switch的高度-->
    <size android:height="20dp"/>
    <corners android:radius="10dp"/>
    <solid android:color="#D9D9D9" />
</shape>

再定义一个轨道开启状态的drawable,switch_yellow_track.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="20dp" />
    <corners android:radius="10dp" />
    <solid android:color="#FECD15" />
</shape>

最后定义一个selector作为轨道的样式,switch_track.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/switch_yellow_track" android:state_checked="true" />
    <item android:drawable="@drawable/switch_gray_track" />
</selector>

2.定义thumb

thumb即滑动块。

在res/drawable内定义一个滑动块的drawable,switch_thumb.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <!-- 滑动块的宽高 -->
    <size
        android:width="20dp"
        android:height="20dp" />
    <solid android:color="#FFFFFF" />
    <!-- 透明的描边-->
    <stroke android:width="3dp"
        android:color="@android:color/transparent"/>
</shape>

增加了一个透明的描边,不然白色的小滑块就完全覆盖掉了外面的轨道。

3.设置Switch

修改android:layout_width,android:layout_height 这两个属性,并不会实际修改Switch的大小设置大了,边上会出现空白部分,设置小了,Switch显示不全。

Switch的高度是由track的高度决定的,宽度呢则可以通过设置switchMinWidth(开关最小宽度 )来更改。

    <Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:switchMinWidth="20dp"
        android:track="@drawable/switch_track"
        android:thumb="@drawable/switch_thumb"/>

源码

github: https://github.com/JeremySun823/MySwitchTest

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容