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

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了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值