view.getDrawingCache()只能工作一次

时间:2012-06-11 23:42:39

标签: android view bitmap

我使用Pragmatic Bookshelf中的Touch V2示例获得了一个带有加载位图图像的RelativeLayout - http://media.pragprog.com/titles/eband3/code/Touchv2/src/org/example/touch/Touch.java

我添加了一个带onclicklistener的单独按钮,单击该按钮时将从图库中加载图像。在活动结果上,图像作为位图加载到RelativeLayout:

    public void getPictureFromFile(Uri targetUri){
    try {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = scale(getContentResolver()
                .openInputStream(targetUri));
        workinprogress = BitmapFactory.decodeStream(
                getContentResolver().openInputStream(targetUri),
                null, options);
        view.setImageBitmap(workinprogress);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

点击下一个按钮,我使用以下方法抓取relativelayout的图像:

                thepicture.buildDrawingCache(true);
            Bitmap bm = Bitmap.createBitmap(thepicture.getDrawingCache());

这个过程非常棒 - 第一张图片。当我再次加载另一个图像时,传递的位图仍然与原始位图相同。我在getDrawingCache()之前尝试了thepicture.invalidate()和thepicture.resetDrawableState(),但似乎都没有将图像更新为新加载的图片,尽管框架布局显示正确的图像。

对于我需要为我加载的第二张图片实现的刷新drawingCache,是否有一些我不明白的事情?

1 个答案:

答案 0 :(得分:39)

为了让它更有用,一旦你每次都要使用view.setDrawingCacheEnabled(true),并且在每次调用view.setDrawingCacheEnabled(false)之后view.getDrawingCache()使用imageView.setDrawingCacheEnabled(true); imageView.buildDrawingCache(true); File imageFile = new File(Environment.getExternalStorageDirectory(), "Pictures/image.jpg"); FileOutputStream fileOutputStream = new FileOutputStream(imageFile); imageView.getDrawingCache(true).compress(CompressFormat.JPEG, 100, fileOutputStream); fileOutputStream.close(); imageView.setDrawingCacheEnabled(false); 。参见示例:

{{1}}