У меня была эта проблема, и я выяснил, как ее исправить в течение нескольких дней, вот моя проблема:
У меня есть класс с именем 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", который я рисую на нем.Когда я нажимаю кнопку, появляется «обычный» фон, а поверх него - «нажатое состояние».Однако это выглядит ужасно, поскольку они оба содержат альфа-канал в разных позициях.Это означает, что «нормальная кнопка» все еще частично видна через прозрачные части «нажатой кнопки».
Вот пример (с уродливо упрощенными изображениями для иллюстрации проблемы):
Обычная кнопка:
Нажатая кнопка:
Как видите, нормальная (синяя) кнопка всегда рисует.Я также проверил оператор If Else в своем методе onDraw, но он никогда не достигает кода отрисовки для «нормальной» кнопки, если кнопка нажата.Поэтому по какой-то причине кнопка все еще находится в памяти или что-то: S.