Android 后台生成长图并分享示例(非长截图)

先看需求:

1.用户点击生成长图按钮,弹出等待框,后台生成一张长图。

2.用户展示界面和最终生成的长图,布局完全不一样,所以不能通过直接将view转换成bitmap,或者长截图来实现。

3.生成的长图,头部加上公司logo,尾部加上二维码。

难点分析:

1.后台进行。

2.长图保证清晰度,并且不能过大,过大可能会分享失败。

效果展示:

具体实现: 长图描述(纯手画,别介意 T_T)

1.准备数据:

a.所需的文字内容

b.所需的图片(必须下载到本地,你可以开启一个线程进行图片的下载,在图片下载完成后,再进行绘制的操作)

2.大致流程:

创建一个类继承自LinearLayout,初始化绑定xml布局文件: (布局中需要包含的是头部view、底部view等宽高固定的view;文字等高度wrap_content的view需要在代码中动态绘制出来,不然高度会有问题,下文有说明)

public LiveDrawLongPictureUtil(Context context) { super(context); init(context);}

public LiveDrawLongPictureUtil(Context context, AttributeSet attrs) { super(context, attrs); init(context);}

public LiveDrawLongPictureUtil(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}

private void init(Context context) {

this.context = context;

// 初始化各个控件

rootView = LayoutInflater.from(context) .inflate(R.layout.layout_draw_long_picture, this, false);

llTopView = rootView.findViewById(R.id.llTopView);// 头部view,高度固定,可直接获取到对应的bitmap

llContent = rootView.findViewById(R.id.llContent);// 各种固定高度的view,高度固定,可直接获取到对应的bitmap

llBottomView = rootView.findViewById(R.id.llBottomView);// 底部view,高度固定,可直接获取到对应的bitmap

// 测量各个块儿的view的宽高(这步很重要,后面需要用到宽高数据,进行画布的创建)

  layoutView(llTopView);
  layoutView(llContent);
  layoutView(llBottomView);

  widthTop = llTopView.getMeasuredWidth();
  heightTop = llTopView.getMeasuredHeight();

  widthBottom = llBottomView.getMeasuredWidth();
  heightBottom = llBottomView.getMeasuredHeight();
}

// 测量view宽高的方法(仅测量父布局)
 private void measureView(View v) {
  int width = HomepageUtil.getPhoneWid();
  int height = HomepageUtil.getPhoneHei();

v.layout(0, 0, width, height);
  int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
  int measuredHeight = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  v.measure(measuredWidth, measuredHeight);
  v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
 }

获取第一步得到的数据,包括图片,需要下载完毕,这是前提;

a.计算头部view、底部view、中间文字内容、中间图片,以及其他view的总高度(px)和宽度(px);

b.创建一个空白的bitmap,使用bitmap的createBitmap方法,传入第一步计算得到的宽高,Config可以随意,推荐RGB_565(省内存):

Bitmap bitmapAll = Bitmap.createBitmap(allBitmapWidth, allBitmapHeight, Bitmap.Config.RGB_565);// 创建所需大小的bitmap

Canvas canvas = new Canvas(bitmapAll);// 创建空白画布
canvas.drawColor(Color.WHITE);// 背景颜色
Paint paint = new Paint();// 画笔
paint.setAntiAlias(true);// 设置抗锯齿
paint.setDither(true);// 防抖动
paint.setFilterBitmap(true);// 设置允许过滤

c.把view从顶部到底部的顺序,一块块绘制到画布上;

d.全部view绘制完毕后,保存bitmapAll到本地文件,如需压缩,可压缩到指定大小和尺寸;

e.进行分享的操作。至此,基本过程就这样。

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

(0)

相关推荐

  • 详解有关Android截图与录屏功能的学习

    简单的截屏和录屏功能. 因为MediaProjection是5.0以上才出现的,所以今天所讲述功能实现,只在5.0以上的系统有效. 截屏: 步骤如下: 1:获取MediaProjectionManager 2:通过MediaProjectionManager.createScreenCaptureIntent()获取Intent 3:通过startActivityForResult传入Intent然后在onActivityResult中通过MediaProjectionManager.getMe

  • Android截屏截图的几种方法总结

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的状态栏) /** * 根据指定的Activity截图(带空白的状态栏) * * @param context 要截图的Activity * @return Bitmap */ public static Bitmap shotActivity(Activity context) { View vie

  • Android实现长图文截图功能实例代码

    前言 截图是我们日常开发经常会遇到的一个功能,最近工作遇到的需求又升级了,需要实现长图文的截图功能,经常查找相关资料终于实现了,支持截取微博.知乎.今日头条等第三方APP...... 先瞅瞅效果图: 效果图 再瞅瞅最终的长截图: 我是长截图一,瞅瞅嘛... 我是长截图二,再瞅一下嘛... 上一周脑子突然冒出长截图这个功能,想着如何截取如微博,知乎,头条等这些第三方APP的界面呢?出于好奇心,花了一周业余时间,撸一个看看. 不就是截屏+拼图,还能有什么难度么?这个...好像确实是. Questio

  • Android实现截图和分享功能的代码

    先给大家展示下效果图吧 直接上代码: xml的布局: <Button android:id="@+id/btn_jp" android:layout_marginTop="10dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:tex

  • Android实现拍照截图功能

    本文将向大家展示如何拍照截图. 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的.因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作. 一.首先准备好需要使用到的Uri: private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file Uri imageUri =

  • Android实现全屏截图或长截屏功能

    本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public static Bitmap getViewBitmap(Activity activity) { // View是你需要截图的View View view = activity.getWindow().getDecorView(); //这两句必须写,否则getDrawingCache报空指针 view.se

  • Android给scrollView截图超过屏幕大小形成长图

    很多的时候,我们想要分享一个界面的所有内容,可是内容太多,超过了屏幕的大小,简单的截屏已经满足不了我们的需要,这时候我们就可以根据布局里scrollView的高度来截取图片. 代码如下: /** * 截取scrollview的屏幕 * @param scrollView * @return */ public static Bitmap getBitmapByView(ScrollView scrollView) { int h = 0; Bitmap bitmap = null; // 获取s

  • Android中如何获取视频文件的截图、缩略图

    背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取视频文件截图 * * @param path 视频文件的路径 * @return Bitmap 返回获取的Bitmap */ public static Bitmap getVideoThumb(String path) { MediaMetadataRetriever media = new Me

  • Android 后台生成长图并分享示例(非长截图)

    先看需求: 1.用户点击生成长图按钮,弹出等待框,后台生成一张长图. 2.用户展示界面和最终生成的长图,布局完全不一样,所以不能通过直接将view转换成bitmap,或者长截图来实现. 3.生成的长图,头部加上公司logo,尾部加上二维码. 难点分析: 1.后台进行. 2.长图保证清晰度,并且不能过大,过大可能会分享失败. 效果展示: 具体实现: 长图描述(纯手画,别介意 T_T) 1.准备数据: a.所需的文字内容 b.所需的图片(必须下载到本地,你可以开启一个线程进行图片的下载,在图片下载完

  • Android编程实现带有图标的ListView并带有长按菜单效果示例

    本文实例讲述了Android编程实现带有图标的ListView并带有长按菜单效果.分享给大家供大家参考,具体如下: MainActivity.Java package com.zxl; import java.util.ArrayList; import java.util.List; import org.w3c.dom.ls.LSException; import android.app.Activity; import android.os.Bundle; import android.v

  • Android实现绘制LocationMarkerView图的示例代码

    目录 LocationMarkerView图的绘制 绘制整公里的文字 添加动画 LocationMarker是运动轨迹上Start.End, 以及整公里点上笔者自定义绘制的一个MarkerView, 当时之所以没有用设计给的icon是这个MarkerView里需要填充动态的数字,自定义的话自主性比较大些也方面做动画,之前的Android 传统自定义View的实现可以看这篇文章介绍 运动App自定义LocationMarker. 这里先看下gif动图: LocationMarkerView图的绘制

  • Android ItemDecoration 实现分组索引列表的示例代码

    本文介绍了Android ItemDecoration 实现分组索引列表的示例代码,分享给大家.具体如下: 先来看看效果: 我们要实现的效果主要涉及三个部分: 分组 GroupHeader 分割线 SideBar 前两个部分涉及到一个ItemDecoration类,也是我们接下来的重点,该类是RecyclerView的一个抽象静态内部类,主要作用就是给RecyclerView的ItemView绘制额外的装饰效果,例如给RecyclerView添加分割线. 使用ItemDecoration时需要继

  • Android 实现无网络传输文件的示例代码

    最近的项目需要实现一个 Android 手机之间无网络传输文件的功能,就发现了 Wifi P2P(Wifi点对点)这么一个功能,最后也实现了通过 Wifi 隔空传输文件 的功能,这里我也来整理下代码,分享给大家. Wifi P2P 是在 Android 4.0 以及更高版本系统中加入的功能,通过 Wifi P2P 可以在不连接网络的情况下,直接与配对的设备进行数据交换.相对于蓝牙,Wifi P2P 的搜索速度和传输速度更快,传输距离更远 实现的效果如下所示: 客户端.png 服务器端.png 一

  • android广角相机畸变校正算法和实现示例

    1.光学相机镜头一般都存在畸变的问题,畸变属于成像的几何失真,它是由于焦平面上不同区域对影像的放大率不同而形成的画面扭曲变形现象.除了一些特定的场合,大部分情况下,这些失真都是需要校正到正常人眼不产生扭曲的程度. 2常见的畸变是枕形畸变,桶形畸变和线性畸变.广角镜头的摄像设备拍摄出来的图像经常会有桶形畸变的问题.原因在于广角镜头使用的是凸透镜,初中物理知识告诉我们凸透镜会对光线起汇聚作用,这是光的折射造成的.而离镜头中心越远,折射效果越强,因而其拍出来的照片会以镜头中心为圆心,呈圆形向外扩展失真

  • Android openGl 绘制简单图形的实现示例

    学习五部曲,弄清楚5个W一个H(when(什么时候使用).where(在哪个地方使用?).who(对谁使用).what(是个什么东西).why(为什么要这么用?).一个H即:how(到底该怎么用?)),基本的概念篇主要围绕这几个方面进行分析 1. What? openGl是什么?openGl ES又是什么? 相信很多人从事开发的都或多或少听到过有关OpenGl这个东西,但是平时用的少,只知道有这么个东西,而且学起来不简单,所以大多数人都不能讲出个个所以然来. 官方对OpenGl的描述为: Ope

  • Android 项目正式签名打包教程分享

    大家在开发安卓应用的时候,在调试阶段通常都是通过 run 的方式发布到模拟器或者真机上,我们知道 android 应用打包后的后缀名是 .apk 文件..apk 文件是一种压缩包,类似 .zip 文件,我们可以通过强制更改它的后缀为 .zip 来解压 apk 获取包里的内容,以这种方式可以验证它其实就是一个压缩包. 在 run 的时候就是将我们所写的代码打包为 apk 文件,打包就是根据签名.标识等信息生成的一个安装包,我们在包里嵌入作者的信息.公司信息等,可以具有唯一的辨识行为,同时也可以维护

  • Android利用Flutter path绘制粽子的示例代码

    目录 前言 绘制 基本轮廓 粽叶 嘴巴 眼睛 腮红 手&脚 头巾 咸甜是一家 发声 动画控制嘴巴开合 用到的技术点 总结 前言 大家好,端午将至,首先提前祝小伙伴端午安康,端午作为中华民族的非常重要的传统节日,粽子那是必不可少的,但是你真的知道粽子的历史吗? 今天跟随本篇文章用Flutter path画一个会科普节日的的粽子吧- 绘制 基本轮廓 首先我们需要将粽子的基本轮廓绘制出来,通过图片可以看到粽子的轮廓是一个圆圆的三角形状, 本篇文章所有的图形都是用纯Path路径制作,这里我们可以将粽子的

  • Android实现启动引导图

    本文实例为大家分享了Android实现启动引导图的具体代码,供大家参考,具体内容如下 下面是安卓启动引导图的实现,话不多说,直接上代码. 1.布局文件:activity_guide.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     and

随机推荐