天天看點

Android getDecorView用途——螢幕截圖

正好做類似ucweb一樣的頁面管理的功能子產品,貼出一起研究

  imageview iv = (imageview) findviewbyid(r.id.imageview01);

  imageview iv2 = (imageview) findviewbyid(r.id.imageview02);

  imageview iv3 = (imageview) findviewbyid(r.id.imageview03);

  //draw的方式對整屏截取,但狀态欄為黑色,不過可以通過canvas的translate方法根據狀态

//欄的高度進行調整

  view cv = getwindow().getdecorview();

  bitmap b = bitmap.createbitmap(200, 200, bitmap.config.rgb_565);

  cv.draw(new canvas(b));

  iv.setimagebitmap(b);

  //對隐藏的未畫過的控件,截出的是黑色

  bitmap image = bitmap.createbitmap(200, 200, bitmap.config.rgb_565);

  bt3.draw(new canvas(image));

  iv2.setimagebitmap(image);

  //也可以通過getdrawingcache擷取

  bt4.setdrawingcacheenabled(true);

  bitmap bitmap = bt4.getdrawingcache();

  drawable drawable = (drawable) new bitmapdrawable(bitmap);

  iv3.setbackgrounddrawable(drawable);

  1.擷取狀态欄高度:

  decorview是window中的最頂層view,可以從window中擷取到decorview,然後decorview有個getwindowvisibledisplayframe方法可以擷取到程式顯示的區域,包括标題欄,但不包括狀态欄。

  于是,我們就可以算出狀态欄的高度了。

  java代碼  

rect frame = new rect();

  getwindow().getdecorview().getwindowvisibledisplayframe(frame);

  int statusbarheight = frame.top;

  rect frame = new rect();

  2.擷取标題欄高度:

  getwindow().findviewbyid(window.id_android_content)這個方法擷取到的view就是程式不包括标題欄的部分,然後就可以知道标題欄的高度了。

  java代碼

  int contenttop = getwindow().findviewbyid(window.id_android_content).gettop();

  //statusbarheight是上面所求的狀态欄的高度

  int titlebarheight = contenttop - statusbarheight

繼續閱讀