Material Designer的低版本兼容實現(十二)—— Slider or SeekBar


  Slider,我更喜歡叫他SeekBar,其實是一個東西啦,就是拖動條。5.0的拖動條和4.x上的HOLO風格完全不同,平添了一些精致。此外還加入了數值指示器,讓用戶在滑動的時候就能知道現在到了什么位置。Ok,理想很美好,兼容很殘酷!我雖然改了很多兼容包本身的bug,但是還是有個挺大的bug沒有解決——指示器錯位。當你在一個可以滑動的view中放着歌slider的時候,它的指示器出現的位置會根據它初次出現的位置來顯示,也就是說如果你把它滾動了,那么它的指示器還是會傻傻的根據它原來的位置進行顯示,而不會根據你滾動的新位置進行顯示。原因是什么呢?其實很簡單,指示器就是個dialog,和拖動條完全是獨立的控件,指示器顯示完畢后就死了,而拖動條還在。所以如果沒處理好指示器和拖動條的關系,就可能會出現錯位的問題。這點我最近看看能不能修復,錯誤的位置在Utils.java中,大家可以去自己修復看看。(已修復)

 

一、將其導入自己的工程中

首先還是下載lib,然后添加支持,並且寫好命名空間。

我維護的:https://github.com/shark0017/MaterialDesignLibrary

原作者版本:https://github.com/navasmdc/MaterialDesignLibrary

大家可以選擇一個下載,我維護的版本可能會修改上面提到的錯位的bug,原作者的版本不知道會不會融合我的代碼,原作者的版本的好處就是可能會持續更新,但我看這個作者也挺懶的,總之大家可以相互借鑒吧。

添加lib支持后我們就可以用這個控件了,放入布局文件前還是要寫命名空間的。

xmlns:app="http://schemas.android.com/apk/res-auto"

然后放上這個控件就好了

    <com.gc.materialdesign.views.Slider
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

這里需要注意的是,上面那個小球和實際的小球完全是不一樣的,我這里僅僅是為了大家在編譯器中預覽而弄了個小球上去,僅僅方便大家直觀的看效果。

實際效果:

 

二、在布局文件中設置各種屬性

app:showNumberIndicator="true"   是否在滑動時顯示指示器

android:background="#ff0000"  設定背景顏色,也就是滑動條顏色

app:thumbSize="30dp"   設置滑動圓球的大小,其實按住后圓球擴大的大小也是可以設置的。但我感覺點擊后放大就是為了告訴用戶你已經按住了這個拖動球,用默認的就完全能實現這個效果,當你的圓球設置的較大后,那個點擊后出現的放大效果就看不到了(不是沒有,而是因為疊加而看不見),也因為你的圓球已經足夠大了,所以也沒必要給用戶什么指示了。所以這個我就沒去做設置。

app:value="35"   初始的value,如果你的max小於你指定的value,那么初始直接會顯示max的值

 

三、通過代碼進行各種設定,包括監聽事件

public class SliderTest extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.slider);
        
        Slider slider = (Slider)findViewById(R.id.slider);
        slider01.showNumberIndicator(true);// 設置推動時顯示指示器

        slider.setBackgroundColor(0xffff0000);// 背景顏色

slider.setValue(40);// 設定初始進度 slider.setBackgroundColor(getResources().getColor(R.color.orange));// 背景顏色// 監聽進度 slider.setOnValueChangedListener(new OnValueChangedListener() { @Override public void onValueChanged(int value) { // TODO 自動生成的方法存根 System.out.println("now value = "+ value); } }); slider.setThumbSize(30);// 設置滑塊的大小 slider.setValue(35, false);// 在線程中設定初始進度,如果為true,那么就是在線程中跟新,可能會慢一些。 } }

 

四、間續滑塊(Discrete Slider)

這個其實就是分段式滑塊了,這個東東可以參考這篇文章中的做法(要做點小修改),適合於有多個選擇值的情況。順便說一句,google涉及的指示器好難看啊,一個倒水滴狀真心丑。而且對於這種有分段值的拖動條,本身就那么幾個值,你出來什么指示器啊,完全沒意義。

文章地址:http://www.cnblogs.com/tianzhijiexian/p/4044086.html

 今天看到有開源的項目已經做好了MD風格的分段式滑動條了,分享下項目的地址:

https://github.com/oli107/material-range-bar

其實它就是根據上文中項目改的,所以對比看看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM