【移动应用开发技术】怎么在Android中动态加载二维码_第1页
【移动应用开发技术】怎么在Android中动态加载二维码_第2页
【移动应用开发技术】怎么在Android中动态加载二维码_第3页
【移动应用开发技术】怎么在Android中动态加载二维码_第4页
【移动应用开发技术】怎么在Android中动态加载二维码_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在Android中动态加载二维码

这篇文章将为大家详细讲解有关怎么在Android中动态加载二维码,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.需求背景需要实现一个动态加载但不显示出来的视图,且该视图上有个动态生成的二维码,最后用其去生成一张快照(也就是图片)。(常见这种情况是来源于“图片分享”的功能需求,与普通图片分享不同在于,该快照图片是动态加载不显示的。)2.需求功能拆解动态二维码的实现动态视图生成快照的实现3.踩坑点提要获取不到动态视图的bitmap无法获取最新动态视图的bitmap4.开发实现动态加载的视图的布局文件代码:<?xml

version="1.0"

encoding="utf-8"?>

<LinearLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/qrcodeContentLl"

android:background="#F0E68C"

android:orientation="vertical">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginTop="100dp"

android:text="二维码快照"

android:textSize="18sp"

android:textStyle="italic"

/>

<ImageView

android:id="@+id/qrcodeIv"

android:layout_width="100dp"

android:layout_height="100dp"

android:layout_gravity="center"

android:layout_marginTop="@dimen/activity_vertical_margin"

android:scaleType="fitCenter"

/>

<!--<TextView-->

<!--android:layout_width="wrap_content"-->

<!--android:layout_height="wrap_content"-->

<!--android:layout_marginTop="800dp"-->

<!--android:text="ahahds"-->

<!--android:layout_gravity="center"/>-->

</LinearLayout>大概样式如下:(上面的线框是用来显示动态生成的二维码图片的)a.动态二维码的实现关于这块内容,网上有太多例子了,其实也不用详解。主要是利用Zxing提供的jar包来进行处理。需要看这块的详细代码可以去文章最后提供的GitHub地址查看,在此只提供下该jar包的资源下载(项目中若只涉及生成二维码模块,那么只要core核心jar包即可):点击下载>>core-3.3.0.jarb.动态视图生成快照的实现private

void

inflateAndShowCaptureView()

{

if

(hideView

==

null)

{

hideView

=

LayoutInflater.from(this).inflate(R.layout.layout_quick_capture,

null);

qrcodeIv

=

(ImageView)

hideView.findViewById(R.id.qrcodeIv);

hideView.setDrawingCacheEnabled(true);//设置控件允许绘制缓存

hideView.measure(View.MeasureSpec.makeMeasureSpec(mainLayoutLl.getWidth(),

View.MeasureSpec.EXACTLY),

View.MeasureSpec.makeMeasureSpec(0,

View.MeasureSpec.UNSPECIFIED));

hideView.layout(0,

0,

hideView.getMeasuredWidth(),

hideView.getMeasuredHeight());

}

else

{

hideView.destroyDrawingCache();//要得到新的视图,就得销毁之前的缓存

}

showCaptureView();

}

private

void

showCaptureView()

{

String

content

=

contentEt.getText().toString().trim();

if

(content

==

null

||

content.length()

==

0)

{

return;

}

if

(qrcodeIv.getWidth()

==

0)

{

return;

}

Bitmap

qrcodeBitmap

=

ZXingUtils.createQRImage(content,

qrcodeIv.getWidth(),

qrcodeIv.getHeight());

qrcodeIv.setImageBitmap(qrcodeBitmap);//先将生成的二维码显示在加载的视图上

Bitmap

bitmap

=

hideView.getDrawingCache();

//

获取视图的绘制缓存(快照)

if

(bitmap

!=

null)

{

showIv.setImageBitmap(bitmap);

}

}1.首先获取到视图的bitmap是通过getDrawingCache()得到的。若视图是在界面上直接显示出来的——>那么使用该方法直接获取bitmap是没有问题的;若视图是动态加载且不显示出来,那么此时获取bitmap是null。此处的解决办法就是手动给该视图布局:hideView.measure(View.MeasureSpec.makeMeasureSpec(mainLayoutLl.getWidth(),

View.MeasureSpec.EXACTLY),

View.MeasureSpec.makeMeasureSpec(0,

View.MeasureSpec.UNSPECIFIED));

hideView.layout(0,

0,

hideView.getMeasuredWidth(),

hideView.getMeasuredHeight());以下做点简单解释:View.MeasureSpec.makeMeasureSpec(intsize,intmode)中有两个参数,size和mode,第一组MeasureSpec中我将size设置为了当前显示页面的布局的宽度(也就是屏幕宽度),然后mode设置为EXACTLY——>所表示的意义是:给hideView中的子View指定了精确的宽度大小为当前屏幕的宽度。mode有三种,EXACTLY,AT_MOST,UNSPECIFIED。在上面代码中,将高度的size指定为0,mode指定为UNSPECIFIED则表示——>整个动态加载的视图高度指定为:依据于最后子View确认的高度。若将第一组MeasureSpec的相关参数也改为size=0,mode=UNSPECIFIED,则两组图对比显示如下:可以看到,动态生成的快照的宽度也变成了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论