596
技術社區[雲棲]
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
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