Размер большого пальца уменьшается на панели поиска после ввода текста во время выполнения

#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);