使用Swith遇到的问题

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



2)、main_switch_thumb.xml



    
            
        
    
            
        
    
            
        

3)、main_switch_track.xml



    
    
    

7、广告

  • 手机如何连电脑?
  • 如何与电脑互发文件?
  • 如何与电脑互发文字?
  • 如何推送通知到电脑?
  • 电脑如何远程控制手机的相机?

快牙网传——全部搞定!

不想试试吗?
在豌豆荚等应用商店搜索“快牙网传“,或立即下载 Apk,也可以扫码下载。
这里写图片描述

你可能感兴趣的:(Android)