转载自 : http://blog.csdn.net/gengqiquan/article/details/65938021

领导最近觉得携程的截屏生成长图分享效果比较好,所以我们也加了个;产品觉得分享出去的长图需要加公司品牌水印,于是我们也加了个;嗯,事件起因就是这样。
长图一般是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();}// 创建对应大小的bitmap
bitmap = 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;}

另:

http://www.cnblogs.com/meieiem/archive/2012/08/15/2639543.html    android 实现图片加水印

转载于:https://www.cnblogs.com/onelikeone/p/7066767.html

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

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

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

  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. Linux 内核,30 年C 语言将升级至 C11
  2. spark算子_Spark常用算子
  3. buffers和cache的区别
  4. 洛谷 P3960 列队【线段树】
  5. 13、mybatis多表关联查询级联属性
  6. 漫谈概率 PCA 和变分自编码器
  7. php mongodb 连接失败,解决PHP使用普通账号连接mongodb报错问题
  8. Visual Studio 2017发布会:黄金时代的家族聚会
  9. 第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建
  10. SpringCloud学习笔记017---分布式之数据分片处理
  11. c语言转换字符类型,C语言基础之数据类型转换
  12. 华为路由器接口编号与接口的对应关系
  13. Android各个版本特性简介
  14. 线性规划模型应用的2个案例
  15. 包过滤防火墙配置举例
  16. PostgreSQL+PostGIS的使用
  17. html+css+js+快速入门
  18. mysql from 嵌套查询_MySQL-10(where /from 嵌套查询)
  19. LabelMe2seg无法生成真值图片的问题解决
  20. python要多久_怎么自学python,大概要多久?

热门文章

  1. Docker学习笔记 之 Docker安装配置使用
  2. 黄聪:浓缩的才是精华:浅析GIF格式图片的存储和压缩(转)
  3. Oracle Instance
  4. 线程创建 pthread_create 中自定义参数注意事项
  5. 【JAVA实例】代码生成器的原理讲解以及实际使用
  6. java jetty的classpath_java代码启动jetty
  7. 在英特尔® 凌动™ 处理器上将 OpenGL* 游戏移植到 Android* (第二部分)
  8. HttpClient的3种超时
  9. Android 4.0 ICS SystemUI浅析——StatusBar结构分析
  10. webpack4.x实战七,生产模式和开发模式分开打包