android宽度较长的字符,处理固定宽度下的长字符串绘制(Android)

在项目中尝试用surfaceview自绘UI来提高用户滑动体验,其中要在特定区域中绘制Text,而且要求固定长度,这就需要自己计算Text所占的宽度,并进行处理。

最终效果:

1c8c0e6b9f8d93bd1b2fe3ac3164e992.png

float text_size = 25.0f;

public void drawBooks() {

Canvas canvas = new Canvas(bmp_shelf);

int i=0;

float row_average = d.screen_width/4.0f;

int offset_x = (int)((row_average - bmp_book.getWidth())/2.0f);

int offset_y = rowheight - bmp_book.getHeight() - 20;

int title_offset_y = (int)(90.0f*dpi/240.0f);

TextPaint textPaint = new TextPaint();

textPaint.setARGB(0xff, 255, 255, 255);

textPaint.setTextSize(text_size);

textPaint.setTextAlign(Align.RIGHT);

textPaint.setAntiAlias(true);

for(Iterator itr=d.list_book.iterator();itr.hasNext();) {

BookData bd = itr.next();

int r = i/4;

int book_x = (int)((i%4)*(row_average)+offset_x);

int book_y = r*rowheight+offset_y;

canvas.drawBitmap(bmp_book, book_x, book_y, null);

String title = measureTitle(bd.title);

StaticLayout layout = new StaticLayout(title, textPaint, 240, Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true);

canvas.translate(book_x+bmp_book.getWidth(), book_y+title_offset_y);

layout.draw(canvas);

canvas.translate(-book_x-bmp_book.getWidth(), -book_y-title_offset_y);

i++;

}

}

public String measureTitle(String title) {

TextPaint textPaint = new TextPaint();

textPaint.setTextSize(text_size);

if(textPaint.measureText(title, 0, title.length())

return title;

int i; String str=null;

for(i=title.length();i>0;i--) {

str = title.substring(0, i) + "...";

float width = textPaint.measureText(str);

if(width

break;

}

}

return str;

}

其中关键代码在measureTitle上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值