我使用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,是否有一些我不明白的事情?
答案 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}}