2013-03-05 73 views
0

我決定使用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(); 
+0

也許getOpacity應該返回RGB_888例如? – Niko 2013-03-05 09:50:47

+0

@Niko:我剛剛嘗試過RGB_888,結果相同。 – 2013-03-05 09:56:53

+1

您如何將尺寸設置爲_defaultLook?添加例如_defaultLook.setBounds(0,0,50,50)和測試。 – Leonidos 2013-03-05 10:17:45

回答

1

你是如何在佈局文件中設置ImageButton(R.id.playButton)的? 重要的值是layout_width和layout_height參數。例如:

<ImageButton 
     android:id="@+id/playButton"      
     android:layout_width="100dp" 
     android:layout_height="100dp" 
/> 

如果設置layout_width和layout_height只是「WRAP_CONTENT」你會看到只有一些像素。

+0

謝謝,明斯基,這是解決方案! – 2013-03-05 10:26:06

+0

不客氣 – Minsky 2013-03-05 10:26:54

相關問題