1、项目开发中需要用到滑块开关,于是使用了github中的一个Material Design风格的开源控件,使用起来挺好的,但是后来发现app耗电高,使用adb shell top | grep packagename查看app的资源占用情况,发现一直占用20%左右的cpu;使用Eclipse的DDMS查看Update Threads,发现是主线程中user的操作一直在进行,后来发现开源控件在onDraw()方法中一直调用invalidate()方法导致控件重绘,重绘中会创建Bitmap。
2、于是想修改此控件,不让它重绘,仅仅在状态改变或者滑动的时候重绘,发现控件显示会出问题,是开源控件本身的bug,更新了github中最新代码,发现其修复了一些问题,但是onDraw()中invalidate()方法导致一直重绘的问题仍然没有修复。
3、在同事的建议下使用android自带的Switch控件,此控件是在android4.0之后添加的。由于是系统自带的控件,所以在不同的手机上显示的效果会受手机ROM风格的影响,为了消除这种影响,需要设置Switch的一些属性,主要是滑块的track和thumb,前者是滑道,后者是滑块。
4、想仿照开源控件的样式定义drawable用作Switch的track和thumb,即track是一条线,thumb是一个圆。用drawable定义好track、thumb后,在xml中设置其track和thumb属性,结果发现只能看到track线,无法看到thumb。我不清楚为何,手边有一本《疯狂android讲义》,里面也是这么设置的。我将thumb用一张图片代替,发现图片只能显示track线那么高的部分,于是我猜测thumb受track高度的影响,我将drawable中的track高度增大,运行代码,发现还真是这样。
5、于是使用photoshop画track,使用drawable画thumb,因为track是一条线,而且上下有边距,我用drawable无法实现。thumb是圆形,用drawable画出后,设置Switch的属性,但是实际运行的效果是:track是对的,但是thumb是椭圆,检查代码,没有错误。于是只好曲线救国:设置Switch的属性textOff、textOn为空,设置thumbTextPadding为thumb的半径,显示正确。
6、xml代码
1)、switch.xml
<Switch
android:id="@+id/switch_connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:checked="false"
android:switchMinWidth="45dp"
android:switchPadding="0dp"
android:textOff=""
android:textOn=""
android:thumb="@drawable/main_switch_thumb"
android:thumbTextPadding="10dp"
android:track="@drawable/main_switch_track" >
</Switch>
2)、main_switch_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"><shape android:shape="oval">
<solid android:color="#f2866a" />
</shape></item>
<item android:state_checked="true"><shape android:shape="oval">
<solid android:color="#ee5a36" />
</shape></item>
<item android:state_checked="false"><shape android:shape="oval">
<solid android:color="#b0b0b0" />
</shape></item>
</selector>
3)、main_switch_track.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_main_switch_track_disable" android:state_enabled="false"></item>
<item android:drawable="@drawable/ic_main_switch_track_check" android:state_checked="true"></item>
<item android:drawable="@drawable/ic_main_switch_track_uncheck" android:state_checked="false"></item>
</selector>
7、广告
- 手机如何连电脑?
- 如何与电脑互发文件?
- 如何与电脑互发文字?
- 如何推送通知到电脑?
- 电脑如何远程控制手机的相机?
快牙网传——全部搞定!
不想试试吗?
在豌豆荚等应用商店搜索“快牙网传“,或立即下载 Apk,也可以扫码下载。