view.getDrawingCache()只能工作一次

kit*_*tka 12 android view bitmap

我有一个带有加载位图图像的RelativeLayout,使用来自Pragmatic Bookshelf的Touch V2示例 - 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

                thepicture.buildDrawingCache(true);
            Bitmap bm = Bitmap.createBitmap(thepicture.getDrawingCache());
Run Code Online (Sandbox Code Playgroud)

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

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

Dmy*_*tov 40

为了让它更有效,一旦你必须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);
Run Code Online (Sandbox Code Playgroud)

  • 作为启用绘图缓存的替代方法,您还可以调用`imageView.buildDrawingCache()`,然后获取绘图缓存,然后调用`imageView.destroyDrawingCache()`.请参阅http://developer.android.com/reference/android/view/View.html#buildDrawingCache() (6认同)
  • +1这使我免于浪费时间工作.好一个dmytro (2认同)