最新公告
  • 欢迎您光临一起游戏源码,本站搜索互联网上优质游戏代码贡献给我们的会员立即加入VIP
  • 开发源码」如何通过安卓代码绘制小票?(二)

    开发源码」如何通过安卓代码绘制小票?(二) 最后编辑:2020-09-29
    增值服务: 自动发货 使用说明 安装指导 环境配置二次开发BUG修复

    上述基本尺寸定义中没有画布高度的定义。画布的高度是动态确定的,取决于票数的多少。这张票的内容是物流订单信息,画布的高度是计算票面信息的总高度和订单的总高度。收据地址和转发地址记录在小票号信息头。由于地址的长度没有固定,因此必须考虑到案文太长以致无法更改行文:

                //转发地址高度计算。
                int forwardAddrHeight = 0;
                if(pi.getForwardAddr() == null || pi.getForwardAddr().isEmpty()) {
                    Logger.d(TAG, "No forward address found.");
                }else{
                    commonPaint.setTextSize(15);
                    int faw = getTextWidth(commonPaint, pi.getForwardAddr());
                    if(faw > HEADER_TEXT_MAX_LENGTH_PER_LINE){
                        //转发地址一行放不下。
                        forwardAddrHeight = (int) Math.ceil(((float)faw / (float)HEADER_TEXT_MAX_LENGTH_PER_LINE));
                        forwardAddrHeight = forwardAddrHeight > 3 ? 3 : forwardAddrHeight; //最大不超过 3 行。
                        Logger.d(TAG, "Forward address can be divide into " + forwardAddrHeight + " lines.");
                    }else{
                        //转发地址比较短,一行就能放下了。
                        Logger.d(TAG, "Forward address only need 1 line to display.");
                        forwardAddrHeight = 1;
                    }
                    commonPaint.setTextSize(15);
                    forwardAddrHeight = (int) (forwardAddrHeight * (commonPaint.descent() - commonPaint.ascent()));
                    forwardAddrHeight += 10;
                    Logger.d(TAG, "Forward address display height:" + forwardAddrHeight);
                }
    
                //收货地址高度计算。
                int revAddrHeight = 0;
                if(pi.getRevAddr() == null || pi.getRevAddr().isEmpty()) {
                    Logger.d(TAG, "No receive address found.");
                }else{
                    int faw = getTextWidth(commonPaint, pi.getRevAddr());
                    if(faw > HEADER_TEXT_MAX_LENGTH_PER_LINE){
                        //收件地址一行放不下。
                        revAddrHeight = (int) Math.ceil(((float)faw / (float)HEADER_TEXT_MAX_LENGTH_PER_LINE));
                        revAddrHeight = revAddrHeight > 3 ? 3 : revAddrHeight; //最大不超过 3 行。
                        Logger.d(TAG, "Receive address can be divide into " + revAddrHeight + " lines.");
                    }else{
                        //收件地址比较短,一行就能放下了。
                        Logger.d(TAG, "Receive address only need 1 line to display.");
                        revAddrHeight = 1;
                    }
                    commonPaint.setTextSize(15);
                    revAddrHeight = (int) (revAddrHeight * (commonPaint.descent() - commonPaint.ascent()));
                    revAddrHeight += 10;
                    Logger.d(TAG, "Receive address display height:" + revAddrHeight);
                }
    
                commonPaint.setTextSize(14); //化身为运单列表画笔,以供计算小票高度。
                final int IMG_HEIGHT = 220 //基本信息头固定高度。
                        + (int)((commonPaint.descent() - commonPaint.ascent() + 10) * poders.size()) //运单列表所需要的高度。
                        + BOTTOM_WHITE_PADDING //尾部留白,以方便用户打印后直接撕取。
                        + forwardAddrHeight //转发地址高度。
                        + revAddrHeight; //收件地址高度。

    源码加红标粗的方法:

        private int getTextWidth(Paint paint, String txt){
            Logger.v(TAG, "getTextWidth()");
            if(paint != null && txt != null) {
                return (int) Math.ceil(paint.measureText(txt));
            }
    
            return 0;
        } //getTextWidth() -- end

    最后,创建了空白位图画布:

    /创建小空白位图,以便随后填写。

    源码语言实例

    帆布.rowcolor(color.whoite);

    你就可以开始画这张小票了。

    在绘图前,作者创建了一个光标来记录当前绘图高度。因为内容从上到下。最后画出外框。

    高清边框填充://pagetop。

    首先,尺子位于边界线,即票票外框的上边界。

    源码语言实例

    接下来的事情就是绘制内容,实际上没有什么就是用油漆操作画布:

    //一行数据。

    commonpoint.settextsize(15);

    printheightcommandpaint.gression-commandpaint.commandpint.aspection;

    if(scannerapplication.getinstance().getlanguagehelper().isthailanguage())

    canvas.drawtext(context.getstring(r.string.activemaincdjhprintline1),35,printheight,command;

    canvas.pi.getprinttimeoftheprint;dawprinttime,230,ight,command

    else

    drawtext(context.getstring(r.string.activitymaincdjhprintline1),60,printheight,commonpaint);

    canvas.pi.getprinttimebringtime,200,printheight,command

    _

    //第二行数据。收件信息

    commonpoint.settextize(20);

    commonpaint.settypeface(typeface.defaultbold);

    45;

    canvas.drawtextpi.getusername(defarmentameddingheight,command);

    *//第三行数据。交货方式。

    commonpoint.settextsize(17);

    commonpaint.settypeface(typeface.default);

    printheightpaint.gressions-commandpaint.assingpaint.assign;

    daw文本(pi.getrevtype(),头文本左边填充,printheight,命令);

    源码语言实例

    位图bitmap位图。createbitmap(img宽度,img高度,位图config.argb888);

    画布新画布(地图);

    对于每个绘图,按需要设置刷子属性并调整光标的高度。帆布的位置取决于你自己的微调。

    源码语言实例

     

    条形码编写器使用Zxing提供的功能将文本转换成条形码图像,并将条形码图像加载到画布上:

    */条形码。

    位图barcodebm制作条形码位图(pi.getorderno),260,70;

    canvas.row位图(barcodebm,140,printheight-60,command);

    MakeBarcodebitMaping方法封装了操作Zzing的接口,为文本生成条形码位图代码,特别是在文章末尾提到完整的源代码。

    源码语言实例

     

    再说一点。强烈建议不要使用Android控件来设置文本内容,而要在机票画布上绘制位图直接生成控件。例如,我发现一些学生喜欢使用textview控件来显示文本,并通过获得textview实例的getdrawingcache()来快速地在画布上绘制文本来获得位图。这种方法非常不相容。由于控制器的内容是由系统控制的,可以在设置中设置显示字体的大小。控制中的字数随着系统显示字数而变化。这可能会导致你画的文本与控件在你的设备上看起来很好,但切换到别人的设备可能会引起问题。因此,为了确保一致性,至少在绘制小票据文本时使用canvas’drawtext()方法,并通过payt的settextsize()控制文本大小。

    一起游戏源码分享,节约一包烟,学习做游戏
    一起游戏源码 » 开发源码」如何通过安卓代码绘制小票?(二)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源均来源于互联网,仅用于学习和研究,请在下载后的24小时内删除程序!
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    请在下方留言评论,官员会补充的,
    为什么解码密码不正确
    解压密码不正确的请联系管理员获取最新的
    • 2020-09-29Hi,初次和大家见面了,请多关照!

    发表评论

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者
    • 305会员总数(位)
    • 5852资源总数(个)
    • 5本周发布(个)
    • 0 今日发布(个)
    • 479稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
  • © 2018 by - 一起游戏 & . All rights reserved 粤ICP备14100428号

  • XML地图 | 站长导航