android 长布局截图(listView ScrollView)
2015-12-03 17:35
447 查看
产品经理需要将一个界面中部分内容截图后保存下来或者分享出去,基本思想是计算截图的view的宽高,新建一个包含bitmap(view大小的)的canvas,在canvas上绘制该view即可获取到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); // 测试输出 savePic(bitmap, "/sdcard/screen_test.png"); return bitmap; } /** * 截图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); // 测试输出 savePic(bitmap, "/sdcard/screen_test.png"); return bitmap; } /** * 获取指定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(); } }
相关文章推荐
- android Widget 中读取SharedPreference 坑
- android.support.v7.internal.widget.ActionBarOverlayLayout
- Android笔记:android的适配
- Android 谷歌gcm推送所需要的端口
- Android 怎样控制电量百分比是否显示
- android样式style使用
- Android studio 安装README.md编辑插件
- Android Button 点击事件无效
- Android 免打扰时间段范围判断
- Android native调试利器
- Android雷达图(蜘蛛网图)绘制
- 【译】Android:更好的自定义字体方案
- Android studio编译错误 duplicate files during packaging of APK...error
- android 4.0 中内置卡创建文件
- android studio安装出现两个图标的问题
- AndroidStudio工具常用设置
- Android Studio 报错集锦
- Android Studio 快捷键
- android项目windowManager简单实用
- 关于安卓的TranslateAnimation的使用