Выравнивание отметок на Android SeekBar
Я пытаюсь установить некоторые индикаторы на SeekBar на Android. Я могу сгенерировать фон с отметками просто отлично, однако не могу найти способ выровнять отметки с фактической линией SeekBar. Как вы можете видеть на скриншоте, галочки начинаются раньше, чем строка SeekBar.
Я мог найти расстояние методом проб и ошибок, но сомневаюсь, что оно останется неизменным на каждом устройстве. Я также заметил, что расстояние между линией и краем фона такое же, как у ползунка большого пальца. Но я не могу найти способ определить, что это за радиус, и опять же, я не уверен, что он будет работать на каждом устройстве.
Я знаю, что доступны пользовательские панели поиска, но я стараюсь не добавлять сторонние зависимости.
1 ответ
Это использует getThumb (). GetMinimumWidth(), чтобы приблизить смещение к началу строки SeekBar. Кажется, работает, но не уверен, что это будет на каждом устройстве.
ОБНОВЛЕНИЕ: этот код работает для случая по умолчанию, но сломается, если вы измените отступы. Лучше использовать getPaddingLeft() и getPaddingRight(), чтобы определить длину и положение ползунка. Эти функции обычно возвращают getThumb (). GetMinimumWidth()/2, если не были изменены отступы или эскиз. getPaddlingLeft() и getPaddingRight() всегда будут работать.
Bitmap b= Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
Canvas c=new Canvas(b);
Paint p=new Paint();
p.setColor(Color.WHITE);
int offset=this.getThumb().getMinimumWidth();
float interval=(float)((width-offset*1.0)/24);
for(int i=0;i<25;i++){
float x=i*interval+offset/2;
c.drawLine(x,0,x,height,p);
c.drawText(Integer.toString(i),x,height,p);
}