Подклассы кнопок Android с пользовательским фоном - PullRequest
0 голосов
/ 23 сентября 2011

У меня была эта проблема, и я выяснил, как ее исправить в течение нескольких дней, вот моя проблема:

У меня есть класс с именем GuiButton, который расширяет android.widget.Button.Я переопределил метод onDraw, чтобы нарисовать мое собственное растровое изображение в качестве фона, так как у меня также были проблемы с получением Android для рисования (и переключения между при нажатии) фоном кнопки так, как я хотел с помощью метода setBackgroundDrawable ().

LongКороче говоря, где бы кнопка ни появлялась на экране, она имеет черный фон на всей области кнопки, а поверх этого нарисована моя собственная кнопка.Это проблема, поскольку кнопка имеет альфа-канал и прозрачна в середине и по краям, а кнопка нарисована поверх фона, в котором есть «прорези» для кнопки, поэтому при автоматическом рисовании черного фона частьэтого фона не видно, и кнопка выглядит некрасиво.

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

@Override
    public void onDraw(Canvas canvas) 
    {
        // Create a new paint
        Paint paint = new Paint();

        // Apply the filter flag for when the bitmap gets 
        // scaled on different screen sizes
        paint.setFlags(Paint.FILTER_BITMAP_FLAG);

        // Clear the canvas
        canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
        if(_pressed)
        {
            canvas.drawBitmap(_pressedBitmap, null, new Rect(0,0,this.getWidth(),this.getHeight()), paint);
        }
        else
        {
            canvas.drawBitmap(_normalBitmap, null, new Rect(0,0,this.getWidth(),this.getHeight()), paint);
        }

        super.onDraw(canvas);
    }

Да,это решает проблему черного фона, но создает еще больше:

1: текст на кнопке теперь отображается под растровым изображением.Ergo, вы не можете его видеть.

2: фон кнопки теперь ВСЕГДА первый "background.png", который я рисую на нем.Когда я нажимаю кнопку, появляется «обычный» фон, а поверх него - «нажатое состояние».Однако это выглядит ужасно, поскольку они оба содержат альфа-канал в разных позициях.Это означает, что «нормальная кнопка» все еще частично видна через прозрачные части «нажатой кнопки».

Вот пример (с уродливо упрощенными изображениями для иллюстрации проблемы):

Обычная кнопка: Normal Button

Нажатая кнопка: Pressed Button

Как видите, нормальная (синяя) кнопка всегда рисует.Я также проверил оператор If Else в своем методе onDraw, но он никогда не достигает кода отрисовки для «нормальной» кнопки, если кнопка нажата.Поэтому по какой-то причине кнопка все еще находится в памяти или что-то: S.

1 Ответ

1 голос
/ 23 сентября 2011

Вам нужно позвонить на super.onDraw(canvas) первым делом, а не последним.

...