Android应用内截图分享的实现记录

近期的项目中有个需求,需要将某个表示用户身份的页面整个截取下来,分享到微信微博。网上也很多的解决方案,我也分享下我自己的爬坑记录。

需求分析

有个页面,用于展示用户获得的成就(主要是装逼)。产品狗狗肯定希望通过sns渠道,把这种装逼手段扩散出去形成口碑。要求很简单,就将这个页面整个截取下来保存成图片,用sns的sdk分享出去。这里就有两种情况:

页面可见的情况下截图分享;

页面不可见的情况下截图分享.

第一种情况很容易解决,而第二种因为页面不可见,就有点蛋疼。

当然,不可能因为两种情况就写两种截取方式。那么应该怎么实现呢?

实现方案

因为涉及到文件存储,那么必然,在保存的过程中肯定不应该放到主线程操作,不然就很容易阻塞UI。又因为涉及到Bitmap的生成,那么我们得考虑下内存使用的问题。整个流程应该是这样->:

展示View

将View转成Bitmap

将Bitmap写入SD卡

返回写入文件的路径

我们另起一个Activity,将其设为透明的主题样式,将要截取的View动态add到Activity之中(当然也可以写在Activity的布局文件中)并将其设为INVISIBLE状态,现在这个View就已经呈现在我们眼前,只是我们看不到而已。这个时候就可以开始截图啦。我将View转为Bitmap的方法也是网上找的

public static Bitmap convertViewToBitmap(View view) {

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),

Bitmap.Config.RGB_565);

//利用bitmap生成画布

Canvas canvas = new Canvas(bitmap);

//把view中的内容绘制在画布上

view.draw(canvas);

return bitmap;

}

将Bitmap写入SD卡的方法:

public static void saveMyBitmap(Bitmap bitmap, String path) {

File f = new File(path);

FileOutputStream fOut = null;

try {

fOut = new FileOutputStream(f);

} catch (FileNotFoundException e) {

e.printStackTrace();

return;

}

bitmap.compress(Bitmap.CompressFormat.PNG, 80, fOut);

try {

fOut.flush();

fOut.close();

} catch (IOException e) {

e.printStackTrace();

}

}

最后Activity调用setResult返回保存的文件地址并关闭Activity后,整个流程就结束了啵

到这里,我们要实现的目的已经达到了。有没有可以优化的地方?那肯定有!最直接的优化方案就是将这个Actvity放在独立进程操作,完成之后推出进程就OK了!

android 截屏 分享,Android应用内截图分享的实现记录相关推荐

  1. 三星 android截屏快捷键,三星C5怎么截图/截屏 三星C5截图快捷键与手掌截屏方法...

    三星C5怎么截屏?截图作为一项手机常用操作功能,很多朋友都需要用到.虽然三星C5内置了多种截屏方法,包括快捷键截屏.智能截屏以及手掌截屏等,不过依旧有很多新手朋友不太了解,下面本文主要分享3种三星C5 ...

  2. 三星 android截屏快捷键,安卓手机怎么截图 各大品牌快捷键截屏大集合

    1三星手机快捷键截屏操作 同时按住三星手机的home键与电源开关键不动,等待1-2秒,界面就被截屏下来了. 2华为手机快捷键截屏操作 同时按住华为手机音量减键与电源开关键不动,等待1-2秒,界面就被截 ...

  3. android 截屏工具,Android带壳截图工具:Screener

    原标题:Android带壳截图工具:Screener 有时候我们需要对手机屏幕截图并添加到设备的外壳,让截图看上去更加的具有设计感,能带壳截图的工具有很多,比如一些国内的手机助手都可以完成这个工作,不 ...

  4. android 截屏 效率,android 截屏以及对该图进行模糊

    由于项目中用得比较多的两个功能 截图 和 模糊,我就整理成一个项目来概述. 一 .截图 核心代码 View.setDrawingCacheEnabled(true); View.buildDrawin ...

  5. Android 截屏监听(截图分享功能实现)

    具体来说就是,检测到了用户在应用内有截图,弹出一个分享界面, 在截图下方添加一个二维码,进行分享. ●●●  前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食, ...

  6. Android截屏分享

    最近项目需要实现Android截屏分享功能,包括Android截屏获取图片.将图片保存到本地.通知系统相册更新.通过微信.QQ.微博分享截屏图片,本篇博客作为总结回顾. 一.Android截屏获取图片 ...

  7. Android截屏截图的几种方法总结

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的 ...

  8. android盒子截图,Android截屏截图的几种方法总结

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的 ...

  9. Android截屏截图方法汇总(Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的 ...

最新文章

  1. 计算机硬盘有usb借口吗,为什么移动硬盘不建议插在台式机前置USB接口上
  2. android phpmyadmin,从android studio向phpmyadmin添加数据时出现问题
  3. C#操作数据库,DataSet,DataGridView,更新数据库 [一] - ADO.NET入门之中
  4. box head上身旋转问题
  5. 工作思想的转变_转变成以员工为中心的工作场所的3个技巧
  6. 大侠学java之继承
  7. 杭电OJ分类题目(4)-Graph
  8. BZOJ2820:YY的GCD
  9. 没有什么不可能!郴州女孩江梦南,从双耳失聪到清华博士!
  10. 关于多线程编程您不知道的5 件事---有关高性能线程处理的微妙之处 (转)
  11. SpringBoot 整合 JPA
  12. 【Linux下载安装jdk8】
  13. ReactNative配合node.js实现的公司通讯录管理app
  14. sp导出法线_sp导出贴图步骤_sp导出贴图
  15. bootstrap第三章:基本的BootstrapCSS
  16. 沈小滨 项目管理中的领导力
  17. Linux电源管理(五)thermal【转】
  18. mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h' 非权威指南
  19. Ubuntu 22.04 x86_64 OVF (sysin)
  20. 设计师 VS 装修工

热门文章

  1. 火柴人小程序linux,火柴人手绘小程序
  2. linux mint php mysql_Installing LAMP (Linux, Apache, MySQL and PHP) On Linux Mint
  3. 《坐热板凳》第五次作业:团队项目需求改进与系统设计
  4. BZOJ2658 ZJOI2012 小蓝的好友(treap)
  5. Azure PaaS服务密钥的安全性
  6. ajax提交表单序列化(serialize())数据
  7. 一个农民矿工的悲情遗书
  8. Oracle 学习笔记(四) Oracle表空间和数据文件
  9. 3G牌照发放脚步渐近 三大运营商提速布局3G
  10. angular6 设置全局变量_angularjs 设置全局变量的3种方法