本文实例为大家分享了Android实现截屏与截长图功能展示的具体代码,供大家参考,具体内容如下

Demo在GitHub的地址:ScreenShoot

Demo在CSDN上的下载地址:Android实现截屏与截长图功能

在Android开发中,有时候会遇到需要截屏分享到朋友圈或者QQ,截屏有截取当前屏幕,也有需要截取不仅一个屏幕,可能会很长。

截取当前屏幕并保存到内存卡的方法:

// 获取指定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();  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();  } }// 程序入口 截取当前屏幕 public static void shootLoacleView(Activity a,String picpath) {  ScreenShot.savePic(ScreenShot.takeScreenShot(a), picpath); }

当视图超过一个屏幕的时候,可能是listview,也可能是Scrollview,这时候,其实截图就是对listview或者Scrollview进行截图:

 /**  * 截取scrollview的屏幕  * **/ public static Bitmap getScrollViewBitmap(ScrollView scrollView,String picpath) {  int h = 0;  Bitmap bitmap;  // 获取listView实际高度  for (int i = 0; i < scrollView.getChildCount(); i++) {   h += scrollView.getChildAt(i).getHeight();  }  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(picpath);  } catch (FileNotFoundException e) {   e.printStackTrace();  }  try {   if (null != out) {    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);    out.flush();    out.close();   }  } catch (IOException e) {  }  return bitmap; } private static String TAG = "Listview and ScrollView item 截图:"; /**  * 截图listview  * **/ public static Bitmap getListViewBitmap(ListView listView,String picpath) {  int h = 0;  Bitmap bitmap;  // 获取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(picpath);  } catch (FileNotFoundException e) {   e.printStackTrace();  }  try {   if (null != out) {    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);    out.flush();    out.close();   }  } catch (IOException e) {  }  return bitmap; } // 程序入口 截取ScrollView public static void shootScrollView(ScrollView scrollView,String picpath) {  ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath); } // 程序入口 截取ListView public static void shootListView(ListView listView,String picpath) {  ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath); }

截长图的效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. Android屏幕相关知识
  2. 监听android屏幕亮、暗、锁和关闭系统动作
  3. 第九章 多语言环境的支持和多屏幕的适配(2)
  4. android-屏幕适配(一)
  5. 三分钟搞定安卓+iOS适配问题
  6. android 屏幕坐标总结
  7. 三星给中国电信定制的支持Android(安卓)2.0新机i899
  8. Android屏幕相关知识总结
  9. 关于Android的屏幕适配

随机推荐

  1. Android(安卓)开发中使用 SQLite 数据库
  2. android framework 源码流程分析技巧
  3. Android(安卓)LinearGradient的使用
  4. android launcher之管理对象LauncherAppl
  5. Android(安卓)时间选择器 PickerView,的详
  6. android 调试技巧
  7. Android(安卓)SDK最新问题
  8. Android(安卓)Studio部分汉化中文包
  9. Android获取当前的城市名的方法
  10. Android(安卓)Swich的基本用法,保存状态等