我決定使用Drawable創建一個ImageButton的外觀。這些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 2013-03-05 09:50:47
@Niko:我剛剛嘗試過RGB_888,結果相同。 – 2013-03-05 09:56:53
您如何將尺寸設置爲_defaultLook?添加例如_defaultLook.setBounds(0,0,50,50)和測試。 – Leonidos 2013-03-05 10:17:45