Я реализую пользовательский 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 для искать бар
Для чего вам нужен этот StateListDrawable? – pskink
ОК. теперь я думаю, что мне нужно LayerListDrawable –
Нет, вам нужно LayerDrawable – pskink