View.getDrawingCache() работает только один раз

У меня есть RelativeLayout с загруженным растровым изображением, используя пример Touch V2 из Pragmatic Bookshelf - 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());

Процесс работает потрясающе - для первого изображения. Когда я снова загружаю другое изображение, битмап все равно совпадает с оригиналом. Я попробовал thepicture.invalidate() и thepicture.resetDrawableState() перед getDrawingCache(), но ни один из них не обновляет изображение до загруженного изображения, хотя макет кадра отображает правильное изображение.

Есть ли что-то, что я не понимаю об обновлении drawCache, которое мне нужно реализовать для второго загружаемого изображения?

Ответ 1

Чтобы заставить его работать больше, как только вы должны использовать 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);