/**
* 获取屏幕图像
*
* @return
*/
private Bitmap takeScreenShot() {
// View截图的View
View v = getWindow().getDecorView();
v.clearFocus(); // 清除视图焦点
v.setPressed(false);// 将视图设为不可点击
int currScreen = getWorkspace().getCurrentScreen();
int screenCount = getWorkspace().getChildCount();
// 壁纸管理器
WallpaperManager wpm = (WallpaperManager) getSystemService(Context.WALLPAPER_SERVICE);
// 屏宽
int screenWidth = v.getWidth();
int screenHeight = v.getHeight();
// 壁纸图片
Drawable d = wpm.getDrawable();
// 壁纸宽与高
int wallPaperWidth = d.getIntrinsicWidth();
int wallPaperHeight = d.getIntrinsicHeight();
// 去掉标题栏,截取标签条顶部
// int i = lis.getTop() + statusBarHeight;
int i = statusBarHeight();
// 将壁纸生成bitmap
Bitmap bmp1 = Bitmap.createBitmap(wallPaperWidth, wallPaperHeight, d.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bmp1);
d.setBounds(0, 0, wallPaperWidth, wallPaperHeight);
d.draw(canvas);
// 截取壁纸时的开始位置,计算每次切屏时,壁纸移动的宽度
int begin = currScreen * ((wallPaperWidth - screenWidth) / (screenCount - 1));
Log.i("app", "begin = "+begin);
// //截取当前屏的壁纸,
Bitmap bmp2 = Bitmap.createBitmap(bmp1, begin, 0, screenWidth, screenHeight);
bmp2 = Bitmap.createBitmap(bmp2, 0, i, screenWidth, screenHeight - i);
//mWorkspace.enableChildrenCache();
//mWorkspace.getCellLayoutAt(mWorkspace.mCurrentScreen).setChildrenDrawingCacheEnabled(true);
//userGroupArea.openChildrenCache();
v.setDrawingCacheEnabled(true);
v.buildDrawingCache();
// 截取图标
Bitmap bmp3 = v.getDrawingCache();
Log.i("app", "cache = " + v.isDrawingCacheEnabled() + "=======" + ViewConfiguration.get(this).getScaledMaximumDrawingCacheSize());
//if (bmp3 == null) {
//
//v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
//v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
//v.buildDrawingCache();
//bmp3=v.getDrawingCache();
//}
Bitmap bmp4 = Bitmap.createBitmap(bmp3, 0, i, screenWidth, screenHeight - i);
Bitmap bitmap = Bitmap.createBitmap(bmp4.getWidth(), bmp4.getHeight(), d.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawBitmap(bmp2, 0, 0, null);
canvas.drawBitmap(HideAppsUtil.removeColor(bmp4), 0, 0, null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
// 将桌面背景还原
v.setBackgroundDrawable(null);
v.destroyDrawingCache();
bmp1.recycle();
bmp2.recycle();
bmp3.recycle();
bmp4.recycle();
return bitmap;
}
在launcher 每次滑动的图片都不一样,但是getDrawingCache 图像却都一样。