GetDrawingCache gibt immer die gleiche Bitmap zurück

Ich arbeite derzeit an einem Projekt, das einen Dialog mit einem Grauwert (schwarz / weiß) Hintergrund anzeigen muss. Um dies zu erreichen, mache ich einen Screenshot und von der ganzen App, platziere diesen Screenshot auf den Hintergrund des Vollbild-Dialogs und stelle einen ColorFilter darauf, um ihn grau zu machen.

Dies funktioniert zum ersten Mal perfekt, aber wenn ich in den Unterlageninhalt blättere und den Dialog erneut anwende, zeigt er genau denselben Hintergrund wie der vorherige.

  • Verständnis von @SuppressLint ("NewApi") Annotation
  • Gibt es Probleme mit Eclipse 3.6 mit dem Android SDK?
  • Android Maven Eclipse kann immer noch nicht apklib importieren
  • Android: Alternative für context.getDrawable ()
  • Wie man Leakcanary verwendet, wie man Leakcanary als ein Glas zu bauen, um eine apk mit .mk-Datei zu erstellen
  • Warum kann ich nicht "run Android lint" aus dem Menü "Window" in Eclipse in der Symbolleiste Ich kann es laufen, ist es OK?
  • Ich benutze den Code:

    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); 

    Mit anderen Worten, der getDrawingCache () gibt immer denselben Screenshot der App zurück.

  • Nicht in der Lage, Systembibliothek für das Projekt auf eclipse ide zu bekommen
  • Chromecast MediaRouteProviderService
  • Android: "versuchen, einen recycelten Bitmap" Fehler mit temporären Bitmaps zu verwenden
  • Was ist auf pollduring Alarm illegalstateexception in android
  • Android Emulator Fehler: std :: bad_alloc
  • TypeNotPresentException beim Ausführen von Android Testcase mit Robolectric und Eclipse
  • One Solution collect form web for “GetDrawingCache gibt immer die gleiche Bitmap zurück”

    Ich denke, das ist, weil deine alte Bitmap noch in deinem Zeichnungscache ist. Aus diesem Grund müssen Sie es zuerst aus dem Cache löschen und dann das neue Bild in den Cache stellen. Werfen Sie einen Blick auf diese Frage, die zu dem gleichen Thema zu sein scheint:

    Löschen des Zeichnungscaches

    EDIT: Also, hier ist der Code, der für mich arbeitet. Ich benutze eine Schaltfläche, um die Bitmap zu speichern und dann die Bitmap in eine Bildansicht zu setzen:

     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); } 

    Also, ich hoffe, ich habe alles wichtig gemacht. So funktioniert der Code: Jedes Mal, rootView der Benutzer auf die rootView klickt, wird alles in rootView als Bitmap gespeichert und dann auf die imageView gezeichnet. Sie können von coure die captureScreen Methode von überall in Ihrem Code aufrufen.

    Ich hoffe, dieses Beispiel hilft dir.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.