• android之截屏(包括截取scrollview与listview的)


    public class ScreenShot {
    	// 获取指定Activity的截屏,保存到png文件
    	public static Bitmap takeScreenShot(Activity activity) {
    		// View是你需要截图的View
    		View view = activity.getWindow().getDecorView();
    		view.setDrawingCacheEnabled(true);
    		view.buildDrawingCache();
    		Bitmap b1 = view.getDrawingCache();
    
    		// 获取状态栏高度
    		Rect frame = new Rect();
    		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    		int statusBarHeight = frame.top;
    		System.out.println(statusBarHeight);
    
    		// 获取屏幕长和高
    		int width = activity.getWindowManager().getDefaultDisplay().getWidth();
    		int height = activity.getWindowManager().getDefaultDisplay()
    				.getHeight();
    		// 去掉标题栏
    		// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
    		Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height
    				- statusBarHeight);
    		view.destroyDrawingCache();
    		savePic(b, "/sdcard/screen_test.png");
    		return b;
    	}
    
    	// 保存到sdcard
    	public static void savePic(Bitmap b, String strFileName) {
    		FileOutputStream fos = null;
    		try {
    			fos = new FileOutputStream(strFileName);
    			if (null != fos) {
    				b.compress(Bitmap.CompressFormat.PNG, 90, fos);
    				fos.flush();
    				fos.close();
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 把View对象转换成bitmap
    	 * */
    	public static Bitmap convertViewToBitmap(View view) {
    		view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
    				MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    		view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    		view.buildDrawingCache();
    		Bitmap bitmap = view.getDrawingCache();
    		if (bitmap != null) {
    			System.out.println("这不是nullde1");
    			Log.d("nullde1", "nullde1");
    		} else {
    			System.out.println("这nullnulllnulnlul");
    		}
    		return bitmap;
    	}
    
    	// 程序入口1
    	public static void shoot(Activity a) {
    		ScreenShot.savePic(ScreenShot.takeScreenShot(a), "/sdcard/screen_test.png");
    	}
    
    	// 程序入口2
    	public static void shootView(View view) {
    		ScreenShot.savePic(ScreenShot.convertViewToBitmap(view),
    				"sdcard/xx.png");
    	}
    
    	public static Bitmap getViewBitmap(View v) {
    		v.clearFocus();
    		v.setPressed(false);
    
    		boolean willNotCache = v.willNotCacheDrawing();
    		v.setWillNotCacheDrawing(false);
    
    		// Reset the drawing cache background color to fully transparent
    		// for the duration of this operation
    		int color = v.getDrawingCacheBackgroundColor();
    		v.setDrawingCacheBackgroundColor(0);
    
    		if (color != 0) {
    			v.destroyDrawingCache();
    		}
    		v.buildDrawingCache();
    		Bitmap cacheBitmap = v.getDrawingCache();
    		if (cacheBitmap == null) {
    			Log.e("TTTTTTTTActivity", "failed getViewBitmap(" + v + ")",
    					new RuntimeException());
    			return null;
    		}
    
    		Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
    
    		// Restore the view
    		v.destroyDrawingCache();
    		v.setWillNotCacheDrawing(willNotCache);
    		v.setDrawingCacheBackgroundColor(color);
    
    		return bitmap;
    	}
    
    	/**
    	 * 截取scrollview的屏幕
    	 * **/
    	public static Bitmap getBitmapByView(ScrollView scrollView) {
    		int h = 0;
    		Bitmap bitmap = null;
    		// 获取listView实际高度
    		for (int i = 0; i < scrollView.getChildCount(); i++) {
    			h += scrollView.getChildAt(i).getHeight();
    			scrollView.getChildAt(i).setBackgroundResource(R.drawable.bg3);
    		}
    		Log.d(TAG, "实际高度:" + h);
    		Log.d(TAG, " 高度:" + scrollView.getHeight());
    		// 创建对应大小的bitmap
    		bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
    				Bitmap.Config.ARGB_8888);
    		final Canvas canvas = new Canvas(bitmap);
    		scrollView.draw(canvas);
    		// 测试输出
    		FileOutputStream out = null;
    		try {
    			out = new FileOutputStream("/sdcard/screen_test.png");
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    		try {
    			if (null != out) {
    				bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
    				out.flush();
    				out.close();
    			}
    		} catch (IOException e) {
    			// TODO: handle exception
    		}
    		return bitmap;
    	}
    
    	private static String TAG = "Listview and ScrollView item 截图:";
    
    	/**
    	 * 	截图listview
    	 * **/
    	public static Bitmap getbBitmap(ListView listView) {
    		int h = 0;
    		Bitmap bitmap = null;
    		// 获取listView实际高度
    		for (int i = 0; i < listView.getChildCount(); i++) {
    			h += listView.getChildAt(i).getHeight();
    		}
    		Log.d(TAG, "实际高度:" + h);
    		Log.d(TAG, "list 高度:" + listView.getHeight());
    		// 创建对应大小的bitmap
    		bitmap = Bitmap.createBitmap(listView.getWidth(), h,
    				Bitmap.Config.ARGB_8888);
    		final Canvas canvas = new Canvas(bitmap);
    		listView.draw(canvas);
    		// 测试输出
    		FileOutputStream out = null;
    		try {
    			out = new FileOutputStream("/sdcard/screen_test.png");
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    		try {
    			if (null != out) {
    				bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
    				out.flush();
    				out.close();
    			}
    		} catch (IOException e) {
    			// TODO: handle exception
    		}
    		return bitmap;
    	}
    
    }
    

      

  • 相关阅读:
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第一部分)——IDiscoveryService
    MS CRM 2011的自定义和开发(7)——视图编辑器(第二部分)
    MS CRM 2011 SDK 5.06版本已经发布
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
    近来遇到的MS CRM 2011方面的几个问题
    MS CRM 2011的自定义与开发(6)——表单编辑器(第二部分)
    Microsoft Dynamics CRM 2011中,Lookup字段的赋值
    MS CRM 2011的自定义和开发(6)——表单编辑器(第三部分)
    Visual Studio 目标框架造成 命名空间“Microsoft”中不存在类型或命名空间名称“Crm”。是否缺少程序集引用中错误的处理
    一步步学习Reporting Services(二) 在报表中使用简单的参数作为查询条件
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3355468.html
Copyright © 2020-2023  润新知