在项目中尝试用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上。

更多相关文章

  1. Android(安卓)P 图像显示系统(三)Android(安卓)HWUI 绘制流程
  2. [Android实例] Android(安卓)实现导航菜单左右滑动效果
  3. Android(安卓)实现 WheelView
  4. Android:Layout_weight属性解析
  5. 滑条自动跳转,显示控件的新条目
  6. Android(安卓)50行代码实现自带点击效果的Button
  7. Android(安卓)OpenGL入门
  8. Android实现的写字板(绘画板)
  9. Android(安卓)平滑和立体翻页效果1

随机推荐

  1. Android 3DES加密
  2. Android 微信SDK分享功能(二)
  3. Android后退时Activity重复出现解决办法
  4. android中WebView关闭打开第三方浏览器
  5. Android知多少
  6. ant编译android项目
  7. android opengl教程
  8. Android 网页html源码的查看器
  9. 2019-08-18(android广播的接收器实现)
  10. Android(安卓)自定义ListView格局和各Ite