在画布上绘制文本在循环中

时间:2017-03-07 08:43:16

标签: java android canvas png

我有一个很长的字符串,我相信它不适合图像。所以我最终计算了行,然后使用BitmapCanvas上逐行编写。问题是只写第一行。我会一直在写这个图像。每行的长度固定为40个字符。请检查以下代码:

private Bitmap prepareImageWithText(String text){
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.text_image); // Load your bitmap here
        Bitmap aBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); // copy the bitmap because the one from the Resources is immutable.
        Canvas canvas = new Canvas(aBitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setTextSize(75);

        for(int i=0; i<calculateLines(text); i++) {
            int beginFrom = i*40;
            int endAt = beginFrom + 40;
            if(endAt > text.length()){
                endAt = text.length()-1;
            }
            String writableArea = text.substring(beginFrom, endAt);
            canvas.drawText(writableArea, 100, 300+(i*100), paint);
            canvas.save();
        }
        return aBitmap;
    }

   private int calculateLines(String text){
        if(!TextUtils.isEmpty(text)){
            int lines = text.length()/40;
            return lines;
        }
        return 1;
    }

2 个答案:

答案 0 :(得分:2)

for(int i=0; i<calculateLines(quote); i++) {

if(endAt > text.length()){

这两行需要你注意。 “text”和“quote”是相同的String吗?

答案 1 :(得分:1)

您将quote传递给calculateLines,如果它不是空的,您只会做任何事情,但是,您在那里使用mQuote的{​​{1}}。我认为这种混乱是导致问题的原因。您需要确保传递的值是您要传递的值,并在计算中使用length length而不是quote的{​​{1}}。< / p>