尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/65938021, 本文出自:【gengqiquan的博客】

领导最近觉得携程的截屏生成长图分享效果比较好,所以我们也加了个;产品觉得分享出去的长图需要加公司品牌水印,于是我们也加了个;嗯,事件起因就是这样。
长图一般是ScrollView和ListView。
我们需要取得这两个控件的完整显示的图片。原理很简单,搞一张和控件长宽一致的画布(就是创建一个高宽相等的bitmap)。然后调用控件的draw方法把自己画到画布上去。
分别贴出两个控件的长图获取方法

 /*** 截取scrollview的屏幕**/public static Bitmap getScrollViewBitmap(ScrollView scrollView) {int h = 0;Bitmap bitmap;for (int i = 0; i < scrollView.getChildCount(); i++) {h += scrollView.getChildAt(i).getHeight();}// 创建对应大小的bitmapbitmap = Bitmap.createBitmap(ScreenUtils.getScreenWidth(scrollView.getContext()), h,Bitmap.Config.ARGB_4444);final Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.parseColor("#f2f7fa"));scrollView.draw(canvas);return bitmap;}
 /*** 截图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();}
listView.getHeight());// 创建对应大小的bitmapbitmap = Bitmap.createBitmap(listView.getWidth(), h,Bitmap.Config.RGB_565);final Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.WHITE);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;}

奉送个获取具体view的显示图的方法

/*** 生成某个view的图片** @author gengqiquan* @date 2017/3/20 上午10:34*/public static Bitmap getViewDrawingCacheBitmap(View view) {view = view.getRootView();if (!view.isDrawingCacheEnabled()) {view.setDrawingCacheEnabled(true);}view.destroyDrawingCache();view.buildDrawingCache();Bitmap bm = view.getDrawingCache();view.setDrawingCacheEnabled(false);return bm;}

再奉送个生成某个LinearLayout图片的方法

/*** 生成某个LinearLayout的图片** @author gengqiquan* @date 2017/3/20 上午10:34*/public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {int h = 0;// 获取LinearLayout实际高度for (int i = 0; i < linearLayout.getChildCount(); i++) {linearLayout.getChildAt(i).measure(0, 0);h += linearLayout.getChildAt(i).getMeasuredHeight();}linearLayout.measure(0, 0);// 创建对应大小的bitmapBitmap bitmap = Bitmap.createBitmap(linearLayout.getMeasuredWidth(), h,Bitmap.Config.RGB_565);final Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.WHITE);linearLayout.draw(canvas);return bitmap;}

完了产品肯定会让你在下面或者上面加上公司的logo图片的,嗯。好人做到低,再送个拼接图片的方法

/**
*拼接图片* @param first 分享的长图* @param second  公司logo图
*@author gengqiquan
*@date 2017/3/25 下午4:56
*/public static Bitmap add2Bitmap(Bitmap first, Bitmap second) {float scale = ((float) first.getWidth()) / second.getWidth();second = ImageUtil.scaleImg(second, scale);int width = first.getWidth();int height = first.getHeight() + second.getHeight();Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);Canvas canvas = new Canvas(result);canvas.drawBitmap(first, 0, 0, null);canvas.drawBitmap(second, 0, first.getHeight(), null);return result;}

再来个添加全图水印的方法

/*** @param first 原始图* @param mark  水印图* @author gengqiquan* @date 2017/3/25 下午4:58*/public static Bitmap waterMark(Bitmap first, Bitmap mark) {float scale = ((float) first.getWidth()) / mark.getWidth();mark = ImageUtil.scaleImg(mark, scale);int height = first.getHeight();Canvas canvas = new Canvas(first);int h = 0;while (h < height + mark.getHeight()) {canvas.drawBitmap(mark, 0, h, null);h = h + mark.getHeight();}return first;}

坑爹的chrome有bug。一在这个位置点换行接向上按键就崩溃。写个博客崩溃了七八次。最近真的是运气不好。

其实我是想说:由于最近被注入了个对象,依赖性比较强,所以这段时间很少写博客了,后面补上。

有什么建议的可以留言喔

如果我的博客对您有帮助,请留言鼓励下或者点个赞吧!

我建了一个QQ群(群号:121606151),用于大家讨论交流Android技术问题,有兴趣的可以加下,大家一起进步。

android生成分享长图并且添加全图水印相关推荐

  1. Android 生成分享长图并且添加全图水印

    转载自 : http://blog.csdn.net/gengqiquan/article/details/65938021 领导最近觉得携程的截屏生成长图分享效果比较好,所以我们也加了个:产品觉得分 ...

  2. android分享截屏到微信,Android 微信分享长图 ScrollView 生成长截图 View变bitmap

    这个不太难,绘制本页布局为图片 这样的功能 1.截屏 这个对于我这个CV战士来说,一见面我就觉得不可取了, ①.截屏 如果有三方库的话 最好了,没有 只能调 手机自带的,然而自带就意味着权限 ②.去除 ...

  3. android微信分享长图功能,安卓分享9宫格图片到微信

    首先感谢@DCloud_Android_磊子,test_weixin_share_mul_pic这个是他写给我的,我只做了一点小改动 用法,先setShareMsg把当前页面的商品名称.相册存到全局变 ...

  4. android 照片拼接长图_Android拼接合并图片生成长图-阿里云开发者社区

    Android拼接合并图片生成长图 代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放. 假设根目录的Pict ...

  5. android 照片拼接长图_最智能的 Android 长图拼接应用:图片自动连接

    点击「添加」图标,按拼接顺序勾选图片(免费版上限为 5 张),倘若不小心弄错了顺序,无需清除重新添加,可以通过按住图片拖动来进行排列.一切准备妥当之后,下一步就可以点击「连接!」来生成长图了. 生成的 ...

  6. android 漫画加载方案,Android加载长图的多种方案分享

    背景介绍 在某些特定场景下,我们需要考虑加载长图的需求,比如加载一幅<清明上河图>,这个好像有点过分了,那就加载1/2的<清明上河图>吧... 那TMD还不是一样道理. 言归正 ...

  7. android 微信分享gif图,android后台动态创建图片并实现微信分享

    今天就记录一下. 先说明一下,之前没有做过类似的东西,百度了一两天才知道,说来很惭愧.有点笨,只能这样说. 在我的脑里只明白,如果要动态创建图片: 一.就是new 嘛 二.就是LayoutInflat ...

  8. Android通过代码生成长图并保存本地

    hello大家好,我是斯普润,很久没有更新博客了.因为最近一直在赶项目,不停加班.难得有时间闲下来写写博客.最近也在抽时间学习flutter,作为一枚程序猿当然不能停止学习的脚步啦~ 说远了,今天分享 ...

  9. Android加载长图滑动显示

    1.记录下学到的Android加载长图写法以备后用 首先准备一张长图.这里把图片先放到项目的 assets文件夹下:命名为big.png 然后开始自定义显示长图的view :BigView impor ...

最新文章

  1. hdu-1847-畅桶工程续
  2. 中国在5G、AI等领域对美国紧追不舍,但设备工艺依旧落后
  3. CUPS Share Printer
  4. 2019蓝桥杯省赛---java---B---7(外卖店优先级)
  5. mysql数据表内容_MySQL数据表
  6. oracle实例是否有dbid,Oracle如何获得数据库的DBID
  7. ai怎么约束每个字的大小_人工智能的约束满意问题
  8. Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​
  9. dbcp 连接都会被断开_科普帖:软件与数据库连接的机制是怎样的?
  10. [转]2020年4月github上最热门项目-python
  11. FPGA实现的线性反馈移位寄存器LFSR
  12. Keil5改黑色炫酷背景
  13. 矢量网络分析仪是什么?矢量网络分析仪的组成
  14. [Java]一个WiFi管理器(获取WiFi连接的网关的ip和信息)和热点管理器(获取连接本机的热点的设备的ip、MAC和信息)
  15. 罗技M590优联无法使用的问题解决
  16. 图解:为什么总有人能“躺着”挣钱?
  17. dongle 工具 蓝牙_bluetooth USB Dongle(蓝牙适配器)怎么用?
  18. raid ahci模式哪个好_一机多用的RAID磁盘阵列 QNAP TR-004体验测评
  19. U盘重装系统-非常简单制作方法
  20. 计算机z,出国留学_计算机词汇(R-Z)_沪江英语

热门文章

  1. android+仿最新网易云音乐底面栏,安卓仿网易云音乐通知栏控制音乐,默认显示Notification bigView...
  2. JAVA设计模式(19):行为型-观察者模式(Observer)
  3. 汽车冲压模具设计与成形工艺30个经验
  4. C语言随机函数扑克牌,c语言-扑克牌小魔术
  5. Unity中动画切换
  6. 你知道怎么健康安全的佩戴蓝牙耳机吗?双11五款高音质小清新蓝牙耳机推荐
  7. 亚马逊发布AI跟踪系统,监督员工能否保持社交距离
  8. Job定时器表达式语法说明
  9. excel快速拆分合并的单元格并填充数据的方法
  10. 数据库,从技术开始下的学习