閱讀596 返回首頁    go 技術社區[雲棲]


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

  getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

  int statusBarHeight = frame.top;

  2.獲取標題欄高度:

  getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個方法獲取到的view就是程序不包括標題欄的部分,然後就可以知道標題欄的高度了。

  Java代碼
  int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

  //statusBarHeight是上麵所求的狀態欄的高度

  int titleBarHeight = contentTop - statusBarHeight

  int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

  //statusBarHeight是上麵所求的狀態欄的高度

  int titleBarHeight = contentTop - statusBarHeight

最後更新:2017-04-02 18:44:46

  上一篇:go Android動態加載——加載未安裝APK中的類&加載已安裝APK中的類和資源
  下一篇:go Android實現搜索關鍵字飛入飛出效果