Intereting Posts
Платформы Android SDK между Linux и Windows Каскадировать значение настраиваемого атрибута из родительского представления в дочернее представление? Получение сообщения при завершении загрузки Как уловить удаление приложения на устройстве и сообщить серверу об этом (iOS / Android) Как удалить предыдущую запись стека из FragmentManager? Автономный вектор TileProvider, который расширяет карту google api v2 в android Как безопасно завершить работу петлителя HandlerThread Как правильно отклонить DialogFragment? Как узнать размер растрового изображения из InputStream до создания растрового изображения? Получить контекст тестового проекта в тестовом примере Android junit Утечка памяти в Android при попытке отправить форму с изображением на PHP-сервер Не удалось выполнить синхронизацию проекта Studio Studio Gradle Не удается найти запись в Keystore. Но я знаю, что там Создайте DummyActivity внутри папки androidTest для тестирования Обработка профайлов Android Studio в многобиблиотечных проектах

GetDrawingCache всегда возвращает тот же Bitmap

В настоящее время я работаю над проектом, который должен отображать диалог с серым (черно-белым) фоном. Для этого я беру снимок экрана и все приложение, поместив этот снимок экрана на фоне полноэкранного диалога и поместив на него ColorFilter, чтобы он был серым.

Это работает идеально в первый раз, но если я прокручиваю содержимое подстилающего слоя и снова запрашиваю диалог, он показывает тот же фон, что и раньше.

Я использую код:

Bitmap bitmap; View rootView = getActivity().getWindow().getDecorView().findViewById(android.R.id.content); rootView.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(rootView.getDrawingCache()); rootView.setDrawingCacheEnabled(false); imageView.setImageBitmap(bitmap); 

Другими словами, getDrawingCache () всегда возвращает тот же снимок экрана приложения.

Solutions Collecting From Web of "GetDrawingCache всегда возвращает тот же Bitmap"

Я думаю, это потому, что ваш старый битмап по-прежнему находится в вашем кэше рисования. Из-за этого вам сначала нужно удалить его из кеша, а затем поместить новое изображение в кеш. Взгляните на этот вопрос, который, по-видимому, относится к одной теме:

Удаление кеша рисования

EDIT: Итак, вот код, который работает для меня. Я использую кнопку для сохранения растрового изображения, а затем устанавливаю растровое изображение в изображение:

 private View rootView; private ImageView bitmapView; private Button switchButton; public Bitmap capturedScreen; public boolean bitmapNeeded = false; ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // do the other stuff rootView.setDrawingCacheEnabled(true); //enable Drawing cache on your view switchButton.setOnClickListener(this); } ... @Override public void onClick(View v) { if (v == switchButton) { //when the button is clicked captureScreen(); } } public void captureScreen() { rootView.buildDrawingCache(); capturedScreen = Bitmap.createBitmap(rootView.getDrawingCache()); imageView.setImageBitmap(capturedScreen); rootView.destroyDrawingCache(); } .... //In the onDraw method of your View: @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(capturedScreen, 0, 0, paint); } 

Итак, я надеюсь, что я затронул все важное. Так работает код: rootView раз, когда пользователь нажимает кнопку, все внутри rootView сохраняется как растровое изображение, а затем нарисовано на изображение. Вы можете передать вызов методу captureScreen из любого места в вашем коде.

Надеюсь, этот пример поможет вам.