处理固定宽度下的长字符串绘制(Android)
16lz
2021-01-23
在项目中尝试用surfaceview自绘UI来提高用户滑动体验,其中要在特定区域中绘制Text,而且要求固定长度,这就需要自己计算Text所占的宽度,并进行处理。
最终效果:
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<BookData> 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())<bmp_book.getWidth()) 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<bmp_book.getWidth()) {break;}}return str;}
其中关键代码在measureTitle上。
更多相关文章
- android图片压缩并转为base64字符串
- Android项目中如果json字符串中key-value顺序很重要,不要使用Andr
- listview为空时,显示字符串
- android 字符串、颜色和尺寸
- Android DataBinding 字符串拼接
- Android xliff和字符串资源
- Android 自定义dialog 设置宽度
- android xliff字符串操作
- Android中测量Text的宽度和高度