0 0

Android getDrawingCache 得到都是同一个图片3

/**
	 * 获取屏幕图像
	 * 
	 * @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  图像却都一样。
 
2012年5月17日 14:57
目前还没有答案

相关推荐

    Android中把bitmap存成BMP格式图片的方法

    在示例代码中,我们先通过`getDrawingCache()`方法获取View的绘制缓存,然后调用`getPixels()`方法得到Bitmap的像素数据。像素数据通常存储在一个整型数组中,每个像素由红、绿、蓝三原色的值表示。 2. **处理BMP...

    android任意手势轨迹截取图片.rar

    在Android平台上,实现任意手势轨迹截屏涉及到一系列的编程技术和概念。这个项目旨在提供一种方法,让用户能够在手机屏幕上自由绘制手势轨迹,并在此基础上截取屏幕的一部分。以下是对这个技术实现的详细解释: ...

    Android 自定义区域截图实现

    在Android平台上,自定义区域截图是一项实用且常见的功能,它允许用户自由选择屏幕上的特定区域进行截图,而非全屏截图。实现这一功能涉及到对Android系统的理解、View的层级结构以及图像处理技术。以下是对该主题的...

    Android中传递图片的2种方法

    在Android应用开发中,有时我们需要在不同的活动(Activity)之间传递数据,其中图片的传递是一个常见的需求。本篇文章将详细介绍两种在Android中传递图片的方法,并提供相应的操作代码实例。 ### 方法一:通过转换成...

    Android调用本机相机实现拍照和截图,保存至本地

    系统会将图片数据存储在一个临时文件中,并通过Intent的extras字段传递回应用: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ...

    Android控件WebView实现完整截图

    // 开启 WebView 的缓存(当开启这个开关后下次调用 getDrawingCache() 方法的时候会把 view 绘制到一个 bitmap 上) webView.setDrawingCacheEnabled(true); // 强制绘制缓存(必须在 setDrawingCacheEnabled...

    Android截图,圆形,Canvas.zip

    1. 创建一个新的Bitmap,其大小等于你需要的圆形图片的直径(假设为直径d,则宽度和高度均为d)。 2. 创建一个`Paint`对象,并设置其抗锯齿属性为true,以确保边缘平滑。 3. 使用`Canvas`的`drawARGB()`方法初始化新...

    安卓头像制作图片圆角剪裁相关-实现截图功能可以手指拖动截图框定义截图尺寸和位置可以旋转图片然后才截图。截图功能十分齐全.rar

    总的来说,这个压缩包提供了一个完整的截图功能实现,包括拖动截图框、定义截图尺寸和位置以及图片旋转,对于学习和开发Android应用中的图像处理功能来说,是一个宝贵的资源。开发者可以通过研究这些代码,了解...

    viewtobitmap.rar

    首先,`getDrawingCache`是Android SDK中View类的一个方法,它允许我们获取到View的渲染结果作为Bitmap。当调用`getDrawingCache()`时,如果没有预先调用`buildDrawingCache()`,那么系统会先构建一个缓存,然后返回...

    Android实现图片的裁剪(不调用系统功能)

    在Android应用开发中,有时我们需要对图片进行裁剪以满足特定的需求,而避免调用系统的图片裁剪功能,以获得更灵活的控制和更好的用户体验。本文将详细介绍一种在Android中实现图片裁剪的方法,这种方法不依赖系统...

    Android截屏保存png图片的实例代码

    在Android开发中,有时我们需要实现一个功能,即捕获当前屏幕的内容并将其保存为图片文件。这个需求在很多场景下都很常见,例如游戏截图、应用教程制作或测试报告记录等。下面将详细解释如何通过提供的代码实现...

    移动应用Android 区域截图源码.rar

    在Android平台上,开发一款能够实现区域截图的应用是一个常见的需求,特别是在移动设备上,用户可能希望截取屏幕的特定部分而不是整个屏幕。这个“移动应用Android 区域截图源码”正是针对这一需求提供的解决方案。...

    固定截图框,移动底层图片截图功能实现,保存至SD卡

    2. **获取屏幕像素**:为了得到截图框内的图像,我们需要在用户释放手指时,遍历截图框内的每一个像素,使用`View.getDrawingCache()`或`Bitmap.createBitmap()`方法获取这部分屏幕的位图数据。 3. **底层图片处理*...

    android当前截屏

    在Android操作系统中,"当前截屏"功能是一个非常基础且常用的功能,允许用户保存设备屏幕上显示的内容为图像文件。在Android应用开发中,实现这一功能通常涉及到以下几个关键知识点: 1. **权限请求**: 在Android...

    Android录屏功能的实现

    Android 5.0 版本后,谷歌发放了一个新的接口 android.media.projection.MediaProjection,可以使用该接口实现录屏功能,不需要获得 ROOT 权限。该接口主要用于“屏幕截图”操作和“音频录制”操作。 使用 android....

    android view转Bitmap生成截图的方法

    Android View 转 Bitmap 生成截图是一种常见的需求,特别是在分享图片和截屏功能中。下面将详细介绍三种不同的方法来实现 Android View 转 Bitmap 生成截图。 第一种方法:使用 DrawingCache 通过使用 View 的 ...

    Android工具栏顶出转场动画的实现方法实例

    - **兼容性测试**: 考虑到Android设备的多样性,进行广泛的设备和API版本测试以确保动画在各种环境下都能正常工作。 总的来说,实现Android工具栏顶出转场动画涉及屏幕截图、内存管理、动画制作等多个技术点。通过...

    android截屏功能实现代码

    android开发中通过View的getDrawingCache方法可以达到截屏的目的,只是缺少状态栏!...2. 添加1个Button(activity_main.xml文件) <RelativeLayout xmlns:android=http://schemas.android.com/apk/res/android

    InterceptPictures

    在Android开发中,"InterceptPictures...总之,"InterceptPictures"项目涵盖了Android开发中关于拍照、截图、图片处理等多个重要知识点,对于想要深入学习Android图像操作的开发者来说,这是一个非常有价值的参考资源。

Global site tag (gtag.js) - Google Analytics