创建一个可绘制的内部类构造函数(并通过扩展?drawable类)

时间:2010-11-07 14:16:51

标签: android drawable

我正在使用一个处理图像异步加载的类。在加载期间,类加载一个colordrawable(稍后将分配给下载的图像)。我想使用可绘制资源来实现“加载”图像,而不是颜色。这怎么可能?在“外部”这个可绘制的类做它会更容易,但作为一个限制,我必须在课堂上做。无法想办法如何引用类中的资源。

目前:

class myDrawable extends ColorDrawable {
  public myDrawable () {
     super (Color.BLACK);
  }
}

正确使用BitmapDrawable吗?

class myDrawable extends BitmapDrawable {
  public myDrawable () {
     super(); // something here to fetch the drawable?
  }
}

BitmapDrawable构造函数如下:

    public BitmapDrawable(Resources res)

如果可以使用,如何为它传递正确的“资源”标识符?例如。超级(R.drawable.stubImage);

2 个答案:

答案 0 :(得分:2)

static class HolderDrawable extends BitmapDrawable {
    private final WeakReference<BitmapDownloaderTask> bitmapDownloaderTaskReference;

    public HolderDrawable(BitmapDownloaderTask bitmapDownloaderTask) {
        super(mDefaultBitmap);
        bitmapDownloaderTaskReference = new WeakReference<BitmapDownloaderTask>(
                bitmapDownloaderTask);

    }

    public BitmapDownloaderTask getBitmapDownloaderTask() {
        return bitmapDownloaderTaskReference.get();
    }

    @Override
    public void draw(Canvas arg0) {
        super.draw(arg0);
    }

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

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

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

您可以通过在线或从资源下载内容来创建mDefaultBitmap。这一步很简单,只需谷歌吧。我建议您将mDefaultBitmap设置为静态字段,这样您就不必在每次创建HolderDrawable时都创建它。

答案 1 :(得分:0)

如果您需要Resources的引用,则可以从Context.getResource()获取它,该上下文将作为自定义视图的构造函数中的参数或您的活动类本身传递。