Android 萬能開關(guān)控件LSwitch

一. 為什么不用系統(tǒng)的Switch 或 目前第三方封裝好的SwitchButton

1. 系統(tǒng)的Switch: 容易出現(xiàn)兼容性問題, 低版本的顯示樣式可能會(huì)不同.
2. 系統(tǒng)的Switch: 改樣式, 都要新建一個(gè)xml文件, 比較麻煩.
3. 第三方SwitchButton: 只是把常見的樣式封裝起來, 碰到特殊情況無法進(jìn)行擴(kuò)展.

github地址: https://github.com/liys666666/LSwitch

二. 先上效果圖---常見樣式

LSwitch.gif

lswitch2.png

二. 簡單使用

1. 導(dǎo)入項(xiàng)目
//項(xiàng)目根目錄下 build.gradle
allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' } //添加
        }
    }
dependencies {
    implementation 'com.github.liys666666:LSwitch:V1.0.4'  //添加
}
2.使用
<com.liys.lswitch.LSwitch
        android:id="@+id/lswitch"
        android:layout_width="50dp"
        android:layout_height="30dp"
        app:checked="true"/>

//監(jiān)聽
lswitch.setOnCheckedListener();
所有屬性

1. LSwitch特有屬性
app:track_radius="" 背景---圓角
app:track_height="" 背景---高度
app:thumb_radius="" 滑塊---圓角
app:thumb_height="" 滑塊---高度
app:thumb_width="" 滑塊---寬度

2. 公共屬性
app:checked="" 是否選中
app:text_show="" 文字是否顯示
app:animator_duration="" 滑動(dòng)--動(dòng)畫時(shí)間
打開
app:track_color_off="" 背景---顏色
app:thumb_color_off="" 滑塊---顏色
app:text_color_off="" 字體---顏色
app:text_size_off="" 字體---大小
app:text_off="" 字體---內(nèi)容
關(guān)閉
app:track_color_on=""
app:thumb_color_on=""
app:text_color_on=""
app:text_size_on=""
app:text_off=""

每個(gè)屬性都有對應(yīng)的set方法 (單位: dp或sp)

三. 如果框架的樣式無法滿足, 應(yīng)該如何擴(kuò)展?

為了方便說明, 舉個(gè)簡單的例子:

lswitch3.png

1. 新建MySwitch 繼承 BaseSwitch 或 LSwitch
2. 重寫getAnimatorValueOff()和getAnimatorValueOn(), 確定滑動(dòng)軌跡.
3. 重寫onDraw(), 繪制你需要的圖形或文字.

public class MySwitch extends BaseSwitch{
    //...省略構(gòu)造方法

    @Override
    protected float getAnimatorValueOff() {  //滑塊打開時(shí)的值
        return mHeight-mWidth/2;
    }

    @Override
    protected float getAnimatorValueOn() { //滑塊關(guān)閉時(shí)的值
        return mWidth/2;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //根據(jù)個(gè)人需要進(jìn)行繪制
        canvas.drawRoundRect(new RectF(0, 0, mWidth, mHeight), mWidth/2, mWidth/2, paintTrack);
        canvas.drawCircle(mWidth/2, animatorValue, mWidth/2, paintThumb);
    }
}

注意: animatorValue的值
例如:
getAnimatorValueOff()=10
getAnimatorValueOn() = 1
打開時(shí): animatorValue 會(huì)從1 慢慢變大到10;
關(guān)閉時(shí): animatorValue 會(huì)從10 慢慢變大到1;

四. 總結(jié):

1. 對于常見樣式, 學(xué)習(xí)成本低, 直接在xml設(shè)置屬性即可.
2. 屬于半開放框架, 完全可以根據(jù)個(gè)人的情況, 擴(kuò)展出屬于自己Switch樣式.
3. 不足之處: 常見的樣式, 沒有其它第三方封裝的完美. 例如, 陰影, 漸變, 圖片等, 不過這些都可以在這個(gè)框架基礎(chǔ)上進(jìn)行擴(kuò)展.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市穷躁,隨后出現(xiàn)的幾起案子墅垮,更是在濱河造成了極大的恐慌步责,老刑警劉巖瞻凤,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞彼,死亡現(xiàn)場離奇詭異骡送,居然都是意外死亡昂羡,警方通過查閱死者的電腦和手機(jī)絮记,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紧憾,“玉大人到千,你說我怎么就攤上這事「八耄” “怎么了憔四?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長般眉。 經(jīng)常有香客問我了赵,道長,這世上最難降的妖魔是什么甸赃? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任柿汛,我火速辦了婚禮,結(jié)果婚禮上埠对,老公的妹妹穿的比我還像新娘络断。我一直安慰自己,他們只是感情好项玛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布貌笨。 她就那樣靜靜地躺著,像睡著了一般襟沮。 火紅的嫁衣襯著肌膚如雪锥惋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天开伏,我揣著相機(jī)與錄音膀跌,去河邊找鬼。 笑死固灵,一個(gè)胖子當(dāng)著我的面吹牛捅伤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巫玻,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼暑认,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大审?” 一聲冷哼從身側(cè)響起蘸际,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徒扶,沒想到半個(gè)月后粮彤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年导坟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屿良。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惫周,死狀恐怖尘惧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情递递,我是刑警寧澤喷橙,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站登舞,受9級(jí)特大地震影響贰逾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菠秒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一疙剑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧践叠,春花似錦言缤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匾二,卻和暖如春哮独,著一層夾襖步出監(jiān)牢的瞬間拳芙,已是汗流浹背察藐。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舟扎,地道東北人分飞。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像睹限,于是被迫代替她去往敵國和親譬猫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359