Как получить ширину, чтобы правильно настроить LinearGradient - PullRequest
0 голосов
/ 22 декабря 2011

Я создаю выбор цвета из SeekBar.До сих пор я успешно заменил прорисовку прогресса в onCreate () следующим образом:

    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.

Если ширина слишком мала, градиент уплотняется с левой стороны.Если он слишком большой, появляется только часть градиента.Как получить правильное значение ширины для правильной настройки линейного градиента?

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 мая 2012

Заменить

LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
        new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
                                0xFF00FFFF, 0xFF0000FF,
                                0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 

на

LinearGradient rainbow = new LinearGradient(0f, 0f, 500f, 0f,
        new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
                                0xFF00FFFF, 0xFF0000FF,
                                0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 
1 голос
/ 22 декабря 2011

Вы можете добавить измерение к своим ресурсам, которое, конечно, может иметь разные значения для разных экранов - оно также будет соответствующим образом масштабироваться, если вы не определили определенный dpi (например).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...