Android仿酷狗音樂SeekBar——樣式篇

Android仿酷狗音樂SeekBar

需求:仿酷狗音樂SeekBar

直接上圖四啰,上代碼


1903148-676fcbf2e5048392.png

1903148-d3e5ab81fa2acd42.png

** 難點(diǎn):用戶點(diǎn)擊或者移動(dòng)是SeekBar滑塊是改變滑塊的圖案 **

先畫兩種不同狀態(tài)的滑塊Thumb

平時(shí)狀態(tài):一個(gè)直徑為10dp大小的白色的圓

slider_thumb_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"    
  android:shape="oval">    
  <size    
    android:width="10dp"    
    android:height="10dp" />
  <solid android:color="#ffffffff" />
</shape>

按下狀態(tài):一個(gè)直徑為10dp大小的白色的圓,背景是半透明的直徑為40dp的圓

slider_thumb_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 白色前景 -->
    <item android:id="@android:id/secondaryProgress"
        android:gravity="center"
        android:bottom="15dp"
        android:top="15dp"
        android:right="15dp"
        android:left="15dp">
        <shape
            android:shape="oval">
            <size
                android:width="10dp"
                android:height="10dp" />
            <solid android:color="#ffffffff" />
        </shape>
    </item>
    <!-- 透明陰影 -->
    <item android:id="@android:id/background"
        android:gravity="center">
        <shape
            android:shape="oval">
            <size
                android:height="40dp"
                android:width="40dp" />
            <solid android:color="#96ffffff" />
        </shape>
    </item>
</layer-list>

畫進(jìn)度條

(不設(shè)置高度,由SeekBar自身控制,SeekBar控件android:layout_height="wrap_content")
play_seekbar_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <size
                android:height="2dp" />
            <corners android:radius="5dp"/>
            <solid android:color="#88ffffff" />
        </shape>
    </item>
    <item
        android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <size
                    android:height="2dp" />
                <corners android:radius="5dp"/>
                <solid android:color="#88ffffff" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <size
                    android:height="2dp"/>
                <corners android:radius="5dp"/>
                <solid android:color="#ffffffff" />
            </shape>
        </clip>
    </item>
</layer-list>

SeekBar樣式xml片段

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp">
        <TextView
            android:layout_gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/seekbar_slider_time"
            android:textColor="@color/color_white"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:visibility="invisible" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/seekBar_layout"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tx_currentTime"
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/color_white"/>
        <SeekBar
            android:id="@+id/seedBar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="-20dp"
            android:layout_marginEnd="-20dp"
            android:paddingStart="28dp"
            android:paddingEnd="28dp"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:layout_weight="1"
            android:splitTrack="false"
            android:maxHeight="2dp"
            android:progressDrawable="@drawable/play_seekbar_bg"
            android:thumb="@drawable/slider_thumb_normal" />
        <TextView
            android:id="@+id/tx_maxTime"
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/color_white"/>
    </LinearLayout>

** SeekBar樣式關(guān)鍵點(diǎn) **

  • android:maxHeight="2dp"——控制進(jìn)度條高度
  • 設(shè)置SeekBar控件邊際瓤狐,以便在滑塊變大是可覆蓋左右兩邊的控件,而不會(huì)被遮住
android:layout_marginStart="-20dp"
android:layout_marginEnd="-20dp"
android:paddingStart="28dp"
android:paddingEnd="28dp"
  • android:splitTrack="false"——控制滑塊覆蓋在進(jìn)度條的上面
  • android:background="@android:color/transparent"——設(shè)置背景透明,去掉滑塊變大時(shí)的周邊光暈
  • android:progressDrawable="@drawable/play_seekbar_bg"——默認(rèn)進(jìn)度條
  • android:thumb="@drawable/slider_thumb_normal"——默認(rèn)滑塊

最關(guān)鍵的地方

使用SeekBar的setThumb方法動(dòng)態(tài)設(shè)置滑塊
代碼

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser){
                    Seekbar_slider_time.setText(updateCurrentTimeText(progress));
                }
                tx_currentTime.setText(updateCurrentTimeText(progress));
                if(progress == seekBar.getMax()){
                    pauseIcon.setLayoutParams(miss);
                    playIcon.setLayoutParams(show);
                }
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Log.d(TAG,"onStartTrackingTouch");
                isUserPressThumb = true;
                Seekbar_slider_time.setVisibility(View.VISIBLE);
                //設(shè)置seekbarThumb相對(duì)位置可大于進(jìn)度條15仪壮,保證thumb在變成40dp直徑后可以滑動(dòng)到進(jìn)度條最末尾
                seekBar.setThumbOffset(15);
                seekBar.setThumb(Thumb_pressed);
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Log.d(TAG,"onStopTrackingTouch");
                mi.seekTo(seekBar.getProgress());
                seekBar.setThumbOffset(0);
                seekBar.setThumb(Thumb_normal);
                Seekbar_slider_time.setVisibility(View.INVISIBLE);
                isUserPressThumb = false;
            }
        });

在用戶開始按下滑塊時(shí)onStartTrackingTouch

//設(shè)置seekbarThumb相對(duì)位置可大于進(jìn)度條15,保證thumb在變成40dp直徑后可以滑動(dòng)到進(jìn)度條最末尾
seekBar.setThumbOffset(15);
//改變滑塊圖案
seekBar.setThumb(Thumb_pressed);

在用戶按下滑塊結(jié)束后onStopTrackingTouch胳徽,恢復(fù)滑塊及seekbar高度

seekBar.setThumbOffset(0);
seekBar.setThumb(Thumb_normal);

* 踩坑過程 *

  • 使用selector的xml文件設(shè)置SeekBar的android:thumb屬性設(shè)置滑塊 *
    play_seekbar_thumb.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"    
   android:constantSize="false"    
   android:variablePadding="false">    
   <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/slider_thumb_normal" />    
   <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/slider_thumb_pressed" />    
   <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/slider_thumb_pressed" />    
   <item android:drawable="@drawable/slider_thumb_normal" />
</selector>

** 坑:有些手機(jī)上按下或者移動(dòng)滑塊积锅,滑塊是變大了,但是由于SeekBar高度還是原來的膜廊,導(dǎo)致滑塊被壓扁成橢圓 **

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乏沸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爪瓜,更是在濱河造成了極大的恐慌蹬跃,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铆铆,死亡現(xiàn)場(chǎng)離奇詭異蝶缀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)薄货,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門翁都,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谅猾,你說我怎么就攤上這事柄慰。” “怎么了税娜?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵坐搔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我敬矩,道長(zhǎng)概行,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任弧岳,我火速辦了婚禮凳忙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禽炬。我一直安慰自己涧卵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布腹尖。 她就那樣靜靜地躺著柳恐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胎撤,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音断凶,去河邊找鬼伤提。 笑死,一個(gè)胖子當(dāng)著我的面吹牛认烁,可吹牛的內(nèi)容都是我干的肿男。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼却嗡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舶沛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窗价,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤如庭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撼港,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坪它,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年帝牡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了往毡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靶溜,死狀恐怖开瞭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罩息,我是刑警寧澤嗤详,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站扣汪,受9級(jí)特大地震影響断楷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崭别,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一冬筒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茅主,春花似錦舞痰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春呀打,著一層夾襖步出監(jiān)牢的瞬間矢赁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工贬丛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撩银,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓豺憔,卻偏偏與公主長(zhǎng)得像额获,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恭应,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • afinalAfinal是一個(gè)android的ioc抄邀,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評(píng)論 2 45
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,088評(píng)論 25 707
  • Android仿酷狗音樂SeekBar——控制篇 需求: 根據(jù)后臺(tái)播放狀態(tài)調(diào)整SeekBar的滑塊位置; 反饋用戶...
    magic5650閱讀 4,100評(píng)論 3 7
  • 廣享堂閱讀 233評(píng)論 0 0
  • 大同燈會(huì)昼榛,天下無雙 大刀長(zhǎng)戟旌旗展境肾,同袍同澤御敵寇。燈火煌煌照譙樓褒纲, 會(huì)心不遠(yuǎn)幾經(jīng)行准夷。 天羅萬(wàn)象驚仙客,下界化作同...
    懂點(diǎn)收藏閱讀 285評(píng)論 0 0