Я создаю цветовой выбор из SeekBar. До сих пор, я успешно заменил прогресс вытяжке в OnCreate() следующим образом:Как получить ширину для правильной настройки LinearGradient
SeekBar colorChooser = (SeekBar) findViewById(R.id.seekBarColorChooser);
LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
0xFF00FFFF, 0xFF0000FF,
0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP);
RoundRectShape roundedRect = new RoundRectShape(new float [] {10f, 10f, 10f, 10f, 10f, 10f, 10f, 10f} , null, null);
ShapeDrawable shape = new ShapeDrawable(roundedRect);
shape.getPaint().setShader(rainbow);
colorChooser.setProgressDrawable((Drawable) shape);
Это отлично работает! Результат - именно то, что я ищу, однако, одна вещь, которая касается меня, - это жесткая кодированная ширина (100f) в LinearGradient.
Поскольку это диалоговое окно еще не реализовано, ни SeekBar, ни Dialog, похоже, не имеют ширины. Другими словами, colorChooser.getWidth() возвращает 0.
Если ширина слишком мала, градиент уплотняется с левой стороны. Если он слишком велик, появляется только часть градиента. Как получить хорошее значение ширины для правильного отображения линейного градиента?
Спасибо!
Спасибо за идею. Он все еще немного похож на жесткое кодирование, но он работает. Я уверен, что мои проблемы будут смягчены, как только я проведу проверку на другой платформе. Спасибо! – Chris
Ну, так или иначе вы определяете размер своих компонентов после графики или обертывания контента - поскольку ваш прогресс доступен, у вас нет содержимого (я полагаю), вам нужно будет указать размер для него - лучше это будет который может быть правильно настроен в соответствии с устройством. – Jens