12

PragmaticBookshelfのTouchV2の例を使用してビットマップ画像が読み込まれた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();
    }
}

次のボタンクリックで、次を使用して相対レイアウトの画像を取得します。

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

プロセスは素晴らしく機能します-最初の画像に対して。別の画像を再度読み込むと、渡されるビットマップは元の画像と同じです。getDrawingCache()の前にpicture.invalidate()とpicture.resetDrawableState()を試しましたが、フレームレイアウトに正しい画像が表示されていても、どちらも新しく読み込まれた画像に画像を更新していないようです。

ロードする2番目の画像に実装する必要があるdrawingCacheの更新について理解できないことがありますか?

4

1 に答える 1

43

それをより多く機能させるには、を呼び出す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);
于 2012-07-12T09:32:17.203 に答える