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

最终效果:

处理固定宽度下的长字符串绘制(Android)_第1张图片

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上。

更多相关文章

  1. android图片压缩并转为base64字符串
  2. Android项目中如果json字符串中key-value顺序很重要,不要使用Andr
  3. listview为空时,显示字符串
  4. android 字符串、颜色和尺寸
  5. Android DataBinding 字符串拼接
  6. Android xliff和字符串资源
  7. Android 自定义dialog 设置宽度
  8. android xliff字符串操作
  9. Android中测量Text的宽度和高度

随机推荐

  1. 自定义全屏Dialog
  2. Android再次按back键退出
  3. 使一个button无效时变灰
  4. Android开发整理
  5. 在gradle中配置umeng多渠道以及不同的ume
  6. Android 获取View高度宽度
  7. WebViewJavascriptBridge实现js与android
  8. Android常用框架地址
  9. 45个android实例源码
  10. Android之NetworkOnMainThreadException