Android: Custom Drawable в виджете SeekBar рисует изображения с псевдонимами - PullRequest
1 голос
/ 18 января 2011

Проблема в том, что когда я использую пользовательский progressDrawable в виджете SeekBar (возможно, неправильно), он отображается в очень псевдониме / уродливом / низком качестве.Я установил «DrawingCacheQuality» на высокий уровень, и нет никакой разницы.У кого-нибудь есть идеи?

Я работаю на Nexus One (OS 2.2.1) с целевой сборкой для проекта как API 1.5 (хотя я надеюсь, что это не имеет значения).

ЗдесьВот пример того, как это выглядит:

alt text

Моя цель - создать простой изящный визуальный переключатель с двумя состояниями (включено и выключено) и ползунок для перемещения между ними.,Я действительно не видел лучшего виджета для этого, и практически все сделано для меня с SeekBar.Если у кого-то есть идея получше, которая не требует перезаписи тонны кода котельной плиты, это было бы неплохо.Просто кажется, что это должно быть действительно выполнимо с минимальными усилиями, каким-то образом работая или расширяя SeekBar.Хотя я немного растерялся, с чего начать.

Полагаю, одной идеей было бы просто наложить мое изображение on_off на ShapeDrawable и использовать его в качестве фона (и "@android: color"/ transparent "для progressDrawable), но я не слишком знаком с тем, как это сделать ...

Базовый код для нового акта

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        seek = (SeekBar)findViewById(R.id.seek);
        seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
            }
            public void onStartTrackingTouch(SeekBar seekBar) { 
            }
            public void onStopTrackingTouch(SeekBar seekBar) {
                if (seek.getProgress() < seek.getMax() / 2.0)
                    seek.setProgress(0);
                else
                    seek.setProgress(seek.getMax());
            }
        });
    }

main.xml, определяющий SeekBar

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF">
    <SeekBar android:id="@+id/seek"
                android:layout_alignParentTop="true" 
                android:layout_centerHorizontal="true"
                android:layout_height="wrap_content" android:layout_width="200dip" 
                android:background="@drawable/background"
                android:padding="4dip" 
                android:drawingCacheQuality="high" 
                android:progressDrawable="@drawable/slider_on_off"  
                android:progress="99" android:max="99" 
                android:maxHeight="100dip"
                android:thumb="@drawable/slider_box"
                android:thumbOffset="0dip"
                />
</RelativeLayout>

background.xml Фон seekbar

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" 
    android:useLevel="false" >
    <corners 
        android:radius="4dip" />
    <solid
        android:color="#FF282828" />
</shape>

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Качество кэша чертежа не имеет отношения к тому, что вы пытаетесь сделать.Убедитесь, что вы поместили свои изображения в папку res / drawable-hdpi.

0 голосов
/ 14 мая 2013

Ну, пост довольно старый, но есть способ сделать это с помощью переключателей.

ОЧЕНЬ ХОРОШО описано на этой странице: http://www.mokasocial.com/2011/07/sexily-styled-toggle-buttons-for-android/

Если кто-то пытается что-то сделатьвот так, взгляни туда.

...