使用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,也可以扫码下载。
这里写图片描述

0 0
原创粉丝点击