- 资源介绍
- 更新记录
- 安装教程
上述基本尺寸定义中没有画布高度的定义。画布的高度是动态确定的,取决于票数的多少。这张票的内容是物流订单信息,画布的高度是计算票面信息的总高度和订单的总高度。收据地址和转发地址记录在小票号信息头。由于地址的长度没有固定,因此必须考虑到案文太长以致无法更改行文:
//转发地址高度计算。 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小时内删除程序!
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 为什么解码密码不正确
- 2020-09-29Hi,初次和大家见面了,请多关照!