安卓仿IOS Switch开关按钮

老规矩,先放上一张图,对比一下安卓原生实现的Switch按钮和仿IOS实现的区别:

Switch效果对比

下面主要讲讲仿IOS Switch控件的实现,其实安卓Switch控件中提供了两个属性让我们去自定义控件的样式,分别是android:thumb=""android:track="",要像实现IOS那样的效果,定义这两个属性即可,下面贴出代码:

<Switch
    android:id="@+id/all_day_switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="@dimen/border_space_nineteen"
    android:thumb="@drawable/thumb"
    android:track="@drawable/track"/>

下面是对应的xml文件:
① thumb.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/blue_thumb"/>
    <item android:drawable="@drawable/gray_thumb"/>
</selector>

② track.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/blue_track"/>
    <item android:drawable="@drawable/gray_track"/>
</selector>

③ blue_thumb.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <!-- 高度30 -->
    <size android:height="30dp" android:width="30dp"/>
    <!-- 圆角弧度 15 -->
    <corners android:radius="15dp"/>
    <!-- 变化率 -->
    <gradient
        android:endColor="#eeeeee"
        android:startColor="#eeeeee" />
    <!--外圈颜色-->
    <stroke android:width="1dp"
        android:color="#388cff"/>
</shape>

④ blue_track.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 高度25 -->
    <size android:height="25dp"/>
    <!-- 圆角弧度 15 -->
    <corners android:radius="15dp"/>
    <!-- 变化率 -->
    <gradient
        android:endColor="#388cff"
        android:startColor="#388cff" />
</shape>

⑤ gray_thumb.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <!-- 高度30 -->
    <size android:height="30dp" android:width="30dp"/>
    <!-- 圆角弧度 15 -->
    <corners android:radius="15dp"/>
    <!-- 变化率 -->
    <gradient
        android:endColor="#eeeeee"
        android:startColor="#eeeeee" />
    <!--外圈颜色-->
    <stroke android:width="1dp"
        android:color="#bbbbbb"/>
</shape>

⑥ gray_track.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <!-- 高度25   此处设置宽度无效-->
    <size android:height="25dp"/>
    <!-- 圆角弧度 15 -->
    <corners android:radius="15dp"/>
    <!-- 变化率  定义从左到右的颜色不变 -->
    <gradient
        android:endColor="#FFFFFF"
        android:startColor="#FFFFFF" />
    <!--外圈颜色-->
    <stroke android:width="1dp"
            android:color="#bbbbbb"/>
</shape>

原理就是,首先定义四个shape标签文件,分别对应控件选中和未选中状态下中间那个圆和背景;然后在selector标签中将这四个标签合理的设置为选中和未选中的状态;最后将两个selector文件设置到控件的android:thumb=""android:track=""属性中,用法和原生switch是一样的。

总结:日常记录一些小功能,有备无患。

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

推荐阅读更多精彩内容

  • 今天看到两个三年级的男生,一个躺在地上,另一个正在用脚踢他。看到这样的场景,我一开始会认为那个踢人的孩子太暴力了,...
    隽嫕阅读 152评论 0 0
  • 你身体里重要的物质"酶"! 遗传基因负责携带你体内的各种酶的复制图,酶使得遗传成为可能。如果你是蓝眼睛,棕头发,那...
    知识改变生活阅读 434评论 0 0
  • 去年写的,扒出来。 我努力是因为我什么都没有,却什么都想要。 二十岁的年纪,一无所有,没有能力没有才华没有特长没有...
    云朔溪阅读 218评论 0 1
  • [玫瑰][玫瑰]早起完成一本朴素小书《人间值得》,简单、纯朴,不强求却不畏惧的平常心,娓娓道来,超乎预料的一本小书...
    燕笑语兮阅读 383评论 0 2