getDrawingCache всегда возвращает одно и то же растровое изображение
В настоящее время я работаю над проектом, который должен отображать диалог с серым (черным / белым) фоном. Чтобы добиться этого, я делаю снимок экрана со всем приложением, поместите этот снимок экрана на фоне полноэкранного диалогового окна и поместите на него 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() всегда возвращает один и тот же снимок экрана приложения.
2 ответа
Я думаю, это потому, что ваше старое растровое изображение все еще находится в вашем кэше чертежей Из-за этого вам сначала нужно удалить его из кеша, а затем поместить новый образ в кеш. Взгляните на этот вопрос, который, кажется, относится к той же теме:
РЕДАКТИРОВАТЬ: Итак, вот код, который работает для меня. Я использую кнопку, чтобы сохранить растровое изображение, а затем установить растровое изображение в виде изображения:
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
сохраняется как растровое изображение, а затем обращается к imageView
, Конечно, вы можете вызвать метод captureScreen из любого места в вашем коде, если это необходимо.
Я надеюсь, что этот пример поможет вам.
rlThemeOne.destroyDrawingCache(); //destroy preview Created cache if any
rlThemeOne.buildDrawingCache(); //build new cache
Bitmap bitmap = rlThemeOne.getDrawingCache(); //get the cache