使用Swith遇到的问题
来源:互联网 发布:ecshop的app源码 编辑:程序博客网 时间:2024/06/02 13:12
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,也可以扫码下载。
- 使用Swith遇到的问题
- JAVA Swith语句使用
- .net中swith,case开关语句的使用
- 使用replaceAll()遇到的问题
- 使用CVS遇到的问题
- 使用dom4j遇到的问题
- 使用dom4j遇到的问题
- 使用Maven遇到的问题
- 使用css遇到的问题
- TFS的使用遇到问题
- 使用selenium遇到的问题
- 使用 Ubuntu 遇到的问题
- 使用My97DatePicker 遇到的问题
- 使用iis遇到的问题
- 使用flashfxp遇到的问题
- 使用myeclipse遇到的问题
- 使用 usingGeneratedKeyColumns遇到的问题
- 使用ScrollView遇到的问题
- RMI server不能获取client对象解决
- VS2010下安装和使用boost库
- 好奇怪的模型和表结构
- HBase-scan API 通过scan读取表中数据
- 最短路系列
- 使用Swith遇到的问题
- 【译】17个提升iOS开发效率的必用工具
- JSR 303 - Bean Validation 介绍及最佳实践
- sicily 1558 He is Offside!
- android两种方式生成keystore
- JDK和JRE的区别与联系
- TestNG如何用excel来做数据驱动
- CSSOM视图模式(CSSOM View Module)相关整理
- iOS开发——UI组件