Пользовательский вид Android сохраняет видимый экран в растровое изображение - PullRequest
1 голос
/ 08 декабря 2011

В моем приложении пользователь манипулирует изображением, вращает, ущипывает, масштабирует и т. Д. Это делает в пределах onDraw() using canvas.translate(), canvas.rotate() и т. Д. Конечно, изображение большое, и после манипуляции с изображением пользователь выполняет взаимодействие с другими представлениями. Дело в том, что я не хочу перерисовывать все большое изображение снова и снова только видимую часть. Поэтому я хотел бы, чтобы после завершения операций пользователь сохранял текущее видимое изображение на экране в память / растровое изображение / кэш и перерисовывал только это.

Как мне этого добиться?

Ответы [ 4 ]

3 голосов
/ 10 декабря 2011

В конструкторе вашего пользовательского вида включите кеш рисования следующим образом: setDrawingCacheEnabled(true);.Затем всякий раз, когда вы хотите сохранить состояние вашего Canvas, вы можете вызвать getDrawingCache(), который возвращает желаемое Bitmap.

Документация: getDrawingCache ()

1 голос
/ 16 декабря 2011

Я нашел действительно замечательную статью о том, что мне нужно ЗДЕСЬ

Чтобы все было ясно, сначала мне нужно создать растровое изображение размером с мой вид, затем создать для него холст, нарисовать на холсте и сохранить его.

public void saveScreenshot() {
            Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            canvas.draw(myGiganticImage)

            File file = new File(context.getFilesDir() + "/cache.jpg");
            FileOutputStream fos;
            try {
                fos = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                fos.close();

                cachedBackground = BitmapFactory.decodeFile(context.getFilesDir()  + "/cache.jpg"
                invalidate()                
            } catch (FileNotFoundException e) {
            } catch (IOException e) {
            }
        }

Я просто вызываю это на onDraw (), когда мне это нужно. Это сохранит растровое изображение во внутренней памяти, которое я могу использовать для рисования вместо большой картинки.

1 голос
/ 16 декабря 2011

При рисовании инициализируйте холст с помощью растрового изображения.сохраните ссылку на это растровое изображение и сохраните ее при необходимости.

0 голосов
/ 12 декабря 2011

Следующие могут помочь вам:

(1)

 View v = view.getRootView();
    v.setDrawingCacheEnabled(true);
    Bitmap b = v.getDrawingCache();

(2) Это похоже на другой вопрос на Как захватить содержимое экрана устройства Android?

(3) Вы можете попробовать использовать эту библиотеку http://code.google.com/p/android-screenshot-library/ В нем представлена ​​библиотека скриншотов Android (ASL), которая позволяет программно захватывать скриншоты с устройств Android без необходимости иметь права root-доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...