即使在布局之后,Android ImageView绘图缓存仍为null

时间:2013-08-02 14:26:56

标签: android android-imageview

我有一个自我裁剪的图像视图,我正在使用绘图缓存。我正在使用ViewTreeObserver查看布局何时准备就绪,然后在视图中拍摄裁剪后的图像并使用裁剪版本更新ImageView的位图。每次绘图缓存为空。我可以将ImageView的位图drawable设置为getDrawingCache(),它很好,但内存很糟糕。我正在尝试拍摄快照并为GC发布其他所有内容。我在这里缺少什么?

    public CroppingImageView(Context context){
        super(context);

        ViewTreeObserver vto = getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                getViewTreeObserver().removeOnGlobalLayoutListener(this);

                crop();

            }
        });
    }

    public void crop(){

        setDrawingCacheEnabled(true);
        buildDrawingCache();
        Bitmap cached = getDrawingCache();
        Log.i("ImageView", "drawing cache " + getDrawingCache());
        Bitmap croppedBitmap = Bitmap.createBitmap(cached);
        destroyDrawingCache();
        cached.recycle();
        cached = null;
        setDrawingCacheEnabled(false);

        setImageBitmap(croppedBitmap);

    }

1 个答案:

答案 0 :(得分:0)

我摆脱了ViewTreeObserver并完成了onLayout的裁剪,现在一切似乎都正常。

protected void onLayout (boolean changed, int left, int top, int right, int bottom){
    super.onLayout(changed, left, top, right, bottom);

    crop();
}