2013-12-12 4 views
0

Я делаю это в деятельности, где image является ImageView:Простого Drawable декоратор не работает

Drawable d = getResources().getDrawable(R.drawable.somejpeg); 

//only one of the lines below    
image.setImageDrawable(d); //works 
image.setImageDrawable(new DrawableDecorator(d)); //does not work - blank image 

Вот моя вытяжка декоратор:

import android.graphics.Canvas; 
import android.graphics.ColorFilter; 
import android.graphics.drawable.Drawable; 

public final class DrawableDecorator extends Drawable { 

    private final Drawable drawable; 

    public DrawableDecorator(Drawable drawable) { 
     this.drawable = drawable; 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     drawable.draw(canvas); 
    } 

    @Override 
    public void setAlpha(int alpha) { 
     drawable.setAlpha(alpha); 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
     drawable.setColorFilter(cf); 
    } 

    @Override 
    public int getOpacity() { 
     return drawable.getOpacity(); 
    } 

} 

Я переопределен, что у меня есть к, просто переходя к украшенному предмету, но чего мне не хватает, что приводит к его провалу?

Обратите внимание, что вызывается метод draw.

ответ

1

Было еще несколько важных переопределений, которые я должен был пройти.

@Override 
public boolean setVisible(boolean visible, boolean restart) { 
    return drawable.setVisible(visible, restart); 
} 

@Override 
public void setBounds(int left, int top, int right, int bottom) { 
    drawable.setBounds(left, top, right, bottom); 
} 

@Override 
public void setBounds(Rect bounds) { 
    drawable.setBounds(bounds); 
} 

@Override 
public int getIntrinsicHeight() { 
    return drawable.getIntrinsicHeight(); 
} 

@Override 
public int getIntrinsicWidth() { 
    return drawable.getIntrinsicWidth(); 
} 
Смежные вопросы