2015-01-27 3 views
0

Я реализую пользовательский SeekBar, потому что мне нужно использовать разные progressDrawable и Thumb. У меня есть папка в активах со всеми изображениями для большого пальца и progreeDrawable, и я пытаюсь загрузить эти изображения в панель поиска. Я сделал тот же трюк с ImageView, проблема была в том, что я использовал не изображения, а файлы xml. Поэтому я решил его с помощью StateList:Custom SeekBar установить большой палец и progressDrawable

ics_play.xml

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:state_activated="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/ico_in_circle_play"/> 
    <item 
     android:state_activated="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/ico_in_circle_pause" /> 
    <item 
     android:state_activated="false" 
     android:state_pressed="true" 
     android:drawable="@drawable/ico_in_circle_play_hover"/> 
    <item 
     android:state_activated="true" 
     android:state_pressed="true" 
     android:drawable="@drawable/ico_in_circle_pause_hover" /> 
</selector> 

Пользовательские StateListDrawable:

public class CustomStateDrawable extends StateListDrawable { 

    private final static String TAG = "LirisStateDrawable"; 
    public boolean inflate(AssetManager assetManager,String theme, String tag){ 

     Drawable d = null; 
     Drawable d1 = null; 
     Drawable d2 = null; 
     Drawable d3 = null; 

     try { 
      d = Drawable.createFromStream(assetManager.open("liris_themes/"+theme+"/"+tag+"_f_f.png"), null); 
      d1 = Drawable.createFromStream(assetManager.open("liris_themes/"+theme+"/"+tag+"_t_f.png"), null); 
      d2 = Drawable.createFromStream(assetManager.open("liris_themes/"+theme+"/"+tag+"_f_t.png"), null); 
      d3 = Drawable.createFromStream(assetManager.open("liris_themes/"+theme+"/"+tag+"_t_t.png"), null); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return false; 
     } 

     addState(new int[]{-android.R.attr.state_activated,-android.R.attr.state_pressed}, d); 
     addState(new int[]{android.R.attr.state_activated,-android.R.attr.state_pressed }, d1); 
     addState(new int[]{-android.R.attr.state_activated,android.R.attr.state_pressed }, d2); 
     addState(new int[]{android.R.attr.state_activated,android.R.attr.state_pressed }, d3); 

     return true; 
    } 
} 

тогда я накачал его в моей пользовательской ImageView

stateListDrawable.inflate(getResources().getAssets(),theme,tag) 

он работал отлично , Но теперь, как я могу реализовать его для поиска?

Я устанавливаю SeekBar прогресса вытяжку с 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" 
     android:drawable="@drawable/rounded_corners_seekbar_transparent"/> 
    <!--<item android:id="@android:id/secondaryProgress"> 
     <scale 
      android:drawable="@drawable/rounded_corners_seekbar_transparent" 
      android:scaleWidth="100%" /> 
    </item>--> 
    <item android:id="@android:id/progress"> 
     <scale 
      android:drawable="@drawable/rounded_corners_seekbar_player" 
      android:scaleWidth="100%" /> 
    </item> 

</layer-list> 

Как я должен использовать StateListDrawable в этом случае, если у меня есть "ID" атрибут ?:

addState(new int[]{android.R.attr.id????}, d); 

Когда я использовал ImageView это был селектор в xml-файле, а не список слоев.

РЕШЕНИЕ

мне нужно использовать LayerDrawable для искать бар

+0

Для чего вам нужен этот StateListDrawable? – pskink

+0

ОК. теперь я думаю, что мне нужно LayerListDrawable –

+0

Нет, вам нужно LayerDrawable – pskink

ответ

1

По XML: -

<SeekBar 
       android:id="@+id/wb_seekbar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:progressDrawable="@drawable/wb_apptheme_scrubber_progress_horizontal_holo_light" 
       android:thumb="@drawable/wb_apptheme_scrubber_control_selector_holo_light" /> 

Изменение вводимого коэффициента динамически/программно:

//setting wb seekbar dynamically 
    RelativeLayout.LayoutParams wbLayoutParams = (RelativeLayout.LayoutParams)wbSeekBar.getLayoutParams(); 
    wbLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); 
    wbSeekBar.setProgressDrawable(getResources().getDrawable(R.drawable.wb_apptheme_scrubber_progress_horizontal_holo_light)); 
    Drawable wbThumb = getResources().getDrawable(R.drawable.wb_apptheme_scrubber_control_selector_holo_light); 
    wbThumb.setBounds(new Rect(0, 0, wbThumb.getIntrinsicWidth(),wbThumb.getIntrinsicHeight())); 
    wbSeekBar.setPadding(padding, 0, padding, 0); 
    wbSeekBar.setLayoutParams(wbLayoutParams); 
    wbSeekBar.setThumb(wbThumb); 

Здесь у нас есть хороший ресурс Android Holo Colors Generator, который поможет создавать элементы с разными цветами намного быстрее. Просто выберите цвет и элемент этимLink

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+1

@WayneEllery Спасибо за ваше предложение, ответ обновлен. – sandeepmaaram

+1

Спасибо, человек, ты спасатель жизни :) – Kedarnath

Смежные вопросы