android异步生成图片的示例代码,css代码示例

6
回复
531
查看
[复制链接]

314

主题

1055

帖子

688

安币

手工艺人

发表于 2018-5-9 15:47:20 | 显示全部楼层 |阅读模式

            

        下面来说说在android上如果异步生成图片,通过xml布局用view排版好图片样式,在子线程生成一张图片,以满足生成用来分享的图片等需求(生成图片前设置可变元素,如用户的头像,昵称等)。

        效果

        点击按钮生成图片:

        

        特性



  

    1. 通过布局和view的方式设计图片样式。


  

    2. 在子线程中生成和保存图片。


  

    3. 封装好工具类,直接使用即可。

        核心代码

[Java] 查看源文件 复制代码
private bitmap createbitmap(view view) {
    int widthspec = view.measurespec.makemeasurespec(view.getlayoutparams().width, view.measurespec.exactly);
    int heightspec = view.measurespec.makemeasurespec(view.getlayoutparams().height, view.measurespec.exactly);
    view.measure(widthspec, heightspec);
    int measurewidth = view.getmeasuredwidth();
    int measureheight = view.getmeasuredheight();
    view.layout(0, 0, measurewidth, measureheight);
    int width = view.getwidth();
    int height = view.getheight();
    bitmap bitmap = bitmap.createbitmap(width, height, bitmap.config.argb_8888);
    canvas canvas = new canvas(bitmap);
    view.draw(canvas);
    return bitmap;
  }

        原理说明

        通过走一遍viewgroup的测量(measure),布局(layout),draw流程,把布局展示的界面画到我们准备好的bitmap上(这一过程可在非ui线程完成),再把bitmap保存在文件或显示到界面上。



  

    4. 在布局中写好图片的样子,然后把布局inflate成view,当然也可以直接代码编写view,设置好里面的可变元素,如头像,昵称等。


  

    5. 通过调用view的measure,layout方法使之测量出内部各控件的大小和排列好各控件。


  

    6. 创建一个和view大小相同的空bitmap,新建一个画布传入该bitamp(new canvas(bitmap)),调用view的draw(canvas)方法,view会把图片绘制在该bitmap上。


  

    7. 保存到文件或直接使用图片。

        使用方法

        在xml中布局图片样式:

[Java] 查看源文件 复制代码
<

        写一个自己的model继承自generatemodel,设置可变元素并使用generatepicturemanager单例的generate方法开始生成:

[Java] 查看源文件 复制代码
private void generate() {
    sharepicmodel sharepicmodel = new sharepicmodel((viewgroup) getwindow().getdecorview());
    sharepicmodel.setavatarresid(r.mipmap.ic_launcher);
    generatepicturemanager.getinstance().generate(sharepicmodel, (throwable, bitmap) -> {
      if (throwable != null || bitmap == null) {
        toast.maketext(this, getstring(r.string.generate_pic_error), toast.length_short).show();
      } else {
        toast.maketext(this, getstring(r.string.generate_pic_success), toast.length_short).show();
        mresultiv.setimagebitmap(bitmap);
      }
    });
  }

        源码地址github: https://github.com/homgwu/picgenerator






        

7

主题

9620

帖子

1968

安币

Android大神

Rank: 6Rank: 6

发表于 2018-5-9 16:08:04 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

9

主题

9600

帖子

1777

安币

Android大神

Rank: 6Rank: 6

发表于 2018-5-9 17:27:24 | 显示全部楼层
支持楼主,支持安卓巴士!

394

主题

1041

帖子

850

安币

手工艺人

发表于 2018-5-9 18:58:36 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

434

主题

1114

帖子

473

安币

手工艺人

发表于 2018-5-9 20:19:55 | 显示全部楼层
支持,感谢,祝巴士越来越好~

758

主题

1464

帖子

1870

安币

手工艺人

发表于 2018-5-9 21:11:43 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

0

主题

9519

帖子

1146

安币

Android大神

Rank: 6Rank: 6

发表于 2018-5-9 22:03:32 | 显示全部楼层
不错不错,楼主辛苦了。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )