2013-03-05 45 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

相关问题