2013-03-05 3 views
0

Я решил создать внешний вид 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(); 
+0

Возможно, getOpacity должен возвращать RGB_888, например? – Niko

+0

@Niko: Я только что попробовал RGB_888, тот же результат. –

+1

как вы устанавливаете размер _defaultLook? добавление, например, _defaultLook.setBounds (0,0, 50,50) и тест. – Leonidos

ответ

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

Спасибо, Мински, это было решение! –

+0

приветствуются – Minsky

Смежные вопросы