android - getDrawingCache always returns the same Bitmap -
i'm working on project needs display dialog grayout (black/white) background. achieve i'm taking screenshot , of whole app, place screenshot on background of fullscreen dialog , put colorfilter on have grayed out.
this works perfect first time, if scroll in underlaying content , request dialog again, shows same background 1 before.
i use 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);
in other words, getdrawingcache() returns same screenshot of app.
i think that's because old bitmap still in drawing cache. because of this, first need delete cache , put new image in cache. take @ question, seems on same topic:
edit: so, here code working me. use button save bitmap , set bitmap image view:
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) { // other stuff rootview.setdrawingcacheenabled(true); //enable drawing cache on view switchbutton.setonclicklistener(this); } ... @override public void onclick(view v) { if (v == switchbutton) { //when button clicked capturescreen(); } } public void capturescreen() { rootview.builddrawingcache(); capturedscreen = bitmap.createbitmap(rootview.getdrawingcache()); imageview.setimagebitmap(capturedscreen); rootview.destroydrawingcache(); } .... //in ondraw method of view: @override protected void ondraw(canvas canvas) { canvas.drawbitmap(capturedscreen, 0, 0, paint); }
this how works: everytime user clicks button, inside rootview
saved bitmap , drawn imageview
. can of course call capturescreen method anywhere in code, if need to.
i hope example helps you.
Comments
Post a Comment