2012-06-11 6 views
10

私は実用的な本棚からタッチV2の例を使用してロードされたビットマップイメージとRelativeLayoutを持っていますギャラリーからの画像。活動上の画像はRelativeLayoutにビットマップとしてロードされる結果:view.getDrawingCache()が一度だけ動作します

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()); 

プロセスは素晴らしい作品 - 最初の画像の場合。もう一度別のイメージをロードすると、渡されたビットマップは元のイメージと変わりません。私はthepicture.invalidate()とthepicture.resetDrawableState()の前にgetDrawingCache()を試しましたが、フレームレイアウトで正しいイメージが表示されているにもかかわらず、どちらもイメージを新しくロードしたピクチャに更新していないようです。

ロードする2番目のイメージを実装するために必要なdrawingCacheをリフレッシュすることについてわからないことがありますか?

答えて

38

これまで以上に動作させるには、を呼び出したあとで、毎回view.setDrawingCacheEnabled(true)と、view.setDrawingCacheEnabled(false)とする必要があります。例を参照してください。

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); 
+2

+1これは私が時間を無駄にしないように保存しました。ニースone dmytro –

+5

描画キャッシュを有効にする別の方法として、 'imageView.buildDrawingCache()'を呼び出して描画キャッシュを取得し、 'imageView.destroyDrawingCache()'を呼び出すこともできます。 http://developer.android.com/reference/android/view/View.html#buildDrawingCache() – lilbyrdie

+0

をご覧ください。ありがとうございました。 –

関連する問題