В моем приложении пользователь манипулирует изображением, поворачивается, щелкает, масштабирует и т.д. Это делается внутри onDraw()
using canvas.translate()
, canvas.rotate()
и т.д. Конечно, изображение является большим и после манипуляции с изображением пользователь выполняет взаимодействия с другими представлениями. Дело в том, что я не хочу перерисовывать все большое изображение снова и снова только видимой частью. Поэтому я хочу, чтобы после того, как пользователь завершил операции, СОХРАНИТЕ текущее изображение VISIBLE на экране в память/битмап/кеш и перерисуйте только это.
Как я могу это достичь?
Я нашел действительно замечательную статью о том, что мне нужно ЗДЕСЬ
Чтобы сделать кепп ясным, сначала мне нужно создать растровое изображение с размером моего представления, а затем создать холст для него, нарисовать холст и затем сохранить его.
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(), когда мне это нужно. Он сохранит растровое изображение во внутренней памяти, которое я могу использовать для рисования вместо большой картинки.
В конструкторе вашего пользовательского представления включите кеш чертежа следующим образом: setDrawingCacheEnabled(true);
, Затем, когда вы хотите сохранить состояние Canvas
вы можете вызвать getDrawingCache()
, который возвращает желаемый Bitmap
.
Документация: getDrawingCache()
В вашей ничьей инициализируйте свой холст с помощью растрового изображения. сохраните ссылку на это растровое изображение и сохраните его, когда это необходимо.
Следующее может помочь вам:
(1)
View v = view.getRootView();
v.setDrawingCacheEnabled(true);
Bitmap b = v.getDrawingCache();
(2) Это похоже на другой вопрос в разделе Как захватить содержимое экрана устройства Android?
(3) Вы можете попробовать использовать эту библиотеку http://code.google.com/p/android-screenshot-library/ Она представляет собой Android Screenshot Library (ASL), которая позволяет программно захватывать скриншоты с устройств Android без необходимости иметь root привилегии доступа.