将ImageView转换为Drawable for canvas

时间:2013-08-16 17:38:03

标签: android android-layout imageview drawable android-canvas

我有一个以编程方式创建的ImageView。我想将整个imageView作为drawable。当我这样做时,我得到空的回复

private Drawable getDrawable(Data data) {
    ImageView image = new ImageView(context);
    image.setBackground(data.getColor());
    image.setImageDrawable(data.getIcon());
    return image.getDrawable();
}

现在,我还怀疑我的方法只返回imageView的可绘制部分,没有背景。

如何将整个ImageView作为可绘制的?

更新

以下情况仍无效:

private Drawable getDrawable(Data data) {
    ImageView image = new ImageView(context);
    image.setBackground(data.getColor());
    image.setImageDrawable(data.getIcon());
    image.setDrawingCacheEnabled(true);
    image.buildDrawingCache();
    Drawable drawable = new BitmapDrawable(context.getResources(), image.getDrawingCache());
    image.setDrawingCacheEnabled(false);
    return drawable;
}

2 个答案:

答案 0 :(得分:1)

我很确定这有效,但我自己没有测试过。尝试使用image.getDrawingCache()获取Bitmap呈现的View。您可能需要使用image.setDrawingCacheEnabled(true)启用绘图缓存。在那里,您可以使用BitmapDrawableBitmap转换为Drawable类型。以下是绘制缓存中Android documentation的一些信息。 here是关于BitmapDrawable的一些信息。

答案 1 :(得分:0)

在致电image.buildDrawingCache()之前,您需要测量并布局图像。您可以尝试使用代码。

int ws = MeasureSpec.makeMeasureSpec(imageWidth, MeasureSpec.EXACTLY);
int hs = MeasureSpec.makeMeasureSpec(imageHeight, MeasureSpec.EXACTLY);
image.measure(ws, hs);
image.layout(0, 0, image.getMeasuredWidth(), image.getMeasuredHeight());