• 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;
    	}
    
    }
    

      

  • 相关阅读:
    iOS macOS拼接字符串
    .NET5控制台程序使用EF连接MYSQL数据库的方法
    redis集群升级
    PostgreSQL(一) 编译安装运行
    bat Windows 批处理脚本编写
    Windows 远程Mac
    js判断是pc或移动端核心代码
    数组拆分,多用于单个数组拆分多个数组,用处swiper里面
    什么是类路径???
    达梦数据库DM8备份时归档日志不连续问题处理
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3355468.html
Copyright © 2020-2023  润新知