#android #android-seekbar
#Android #android-панель поиска
Вопрос:
Я внедрил пользовательскую панель поиска и установил для нее пользовательское изображение большого пальца. Когда когда-либо изменяется прогресс, я показываю его на большом пальце. Изначально он отображается правильно. Когда я перемещаю его вперед, назад, размер большого пальца уменьшается.
Вот код для того же.
Компонент XML
<SeekBar
android:id="@ id/sb_timelimit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:max="60"
android:maxHeight="6dp"
android:minHeight="6dp"
android:progress="10"
android:progressDrawable="@drawable/timelimitprogress"
android:thumb="@drawable/timecircle" />
Список слоев
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@android:id/background"
android:drawable="@drawable/greyprocessbar"/>
<item android:id="@android:id/progress">
<scale
android:drawable="@drawable/orangeprocessbar"
android:scaleWidth="100%" />
</item>
Прослушиватель панели поиска
new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int value = seekBar.getProgress(); //this is the value of the progress bar (1-100)
//value = progress; //this should also work
String valueString = value " sec"; //this is the string that will be put above the slider
seekBar.setThumb(writeOnDrawable(R.drawable.timecircle, valueString));
}
});
private BitmapDrawable writeOnDrawable(int drawableId, String text){
Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId, options).copy(Bitmap.Config.ARGB_8888, true);
if(paint == null){
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
paint.setStyle(Style.FILL);
paint.setColor(getResources().getColor(R.color.grey_text)); //Change this if you want other color of text
paint.setTextSize(30); //Change this if you want bigger/smaller font
Canvas canvas = new Canvas(bm);
canvas.drawText(text, 10, bm.getHeight()/4, paint); //Change the position of the text here
return new BitmapDrawable(bm);
}
Ссылочные скриншоты
Перед поиском изменений
После изменения поиска
У кого-нибудь есть идея о том, как решить эту проблему? Заранее спасибо.
Ответ №1:
Эта проблема решается путем изменения строки ниже
return new BitmapDrawable(bm);
Для
return new BitmapDrawable(getResources(), bm);