Я решил создать внешний вид ImageButton с помощью Drawables. Эти Drawables не примитивны, поэтому я должен создать их в коде. Ниже приведена упрощенная версия пользовательской реализации Drawable.Реализация пользовательского Drawable содержит другой Drawable
На данный момент я не могу справиться с этим, чтобы получить видимость, поэтому я ожидаю, что там будет какая-то глупая ошибка новичка.
public class PlayButtonDrawable extends Drawable {
private Drawable _defaultLook;
public PlayButtonDrawable() {
_defaultLook = createDefaultLook();
}
@Override
public void draw(Canvas canvas) {
_defaultLook.draw(canvas);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSPARENT;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
private Drawable createDefaultLook() {
GradientDrawable oval = new GradientDrawable(Orientation.BOTTOM_TOP,
new int[]{0xCDFFFFFF, 0xCDCCCCCC});
oval.setGradientType(GradientDrawable.RADIAL_GRADIENT);
oval.setShape(GradientDrawable.OVAL);
oval.setBounds(0, 0, 100, 100);
oval.setStroke(4, 0xFF4CFF00);
oval.setGradientRadius(100);
oval.setGradientCenter(25, 25);
return oval;
}
}
Этот PlayButtonDrawable добавлен к активности в onCreate.
_playButton = (ImageButton)findViewById(R.id.playButton);
_playButton.setImageDrawable(new PlayButtonDrawable());
_playButton.setOnClickListener(_playButtonClickListener);
_playButton.invalidate();
Возможно, getOpacity должен возвращать RGB_888, например? – Niko
@Niko: Я только что попробовал RGB_888, тот же результат. –
как вы устанавливаете размер _defaultLook? добавление, например, _defaultLook.setBounds (0,0, 50,50) и тест. – Leonidos