使用的场景主要是绘制文本的时候指定绘制区域的宽度,文本需要根据宽度自动换行。
使用TextPaint和StaticLayout就可以实现这个功能,并可以获得绘制后的文本区域的高度:
package com.hu.text; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.text.Layout.Alignment; import android.text.StaticLayout; import android.text.TextPaint; import android.view.MotionEvent; import android.view.View; import com.example.texttest.R; public class MyView extends View { TextPaint textPaint = null; StaticLayout staticLayout = null; Paint paint = null; int width = 50; int height = 0; String txt = null; boolean running = false; public MyView(Context context) { super(context); textPaint = new TextPaint(); textPaint.setAntiAlias(true); textPaint.setTextSize(12); txt = getResources().getString(R.string.my_text); staticLayout = new StaticLayout(txt, textPaint, width, Alignment.ALIGN_NORMAL, 1, 0, false); height = staticLayout.getHeight(); paint = new Paint(); paint.setStyle(Style.STROKE); paint.setColor(Color.RED); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: running = !running; if(running){ new Thread(){ public void run() { while(running){ width ++; staticLayout = new StaticLayout(txt, textPaint, width, Alignment.ALIGN_NORMAL, 1, 0, false); height = staticLayout.getHeight(); postInvalidate(); try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(width >= 300){ width = 50; } } }; }.start(); } break; default: break; } return super.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub canvas.translate(20, 20); staticLayout.draw(canvas); canvas.drawRect(0, 0, width, height, paint); super.onDraw(canvas); } }
完。
相关推荐
StaticLayout是android中处理文字换行的一个工具类,StaticLayout已经实现了文本绘制换行处理,下面这篇文章主要介绍了Android中用StaticLayout实现文本绘制自动换行的相关资料,需要的朋友可以参考。
在Android开发中,文本显示是常见的任务之一,但有时候我们可能会...`StaticLayoutDemo`项目应该包含了使用`StaticLayout`实现自动换行的示例代码,你可以通过学习和研究这个示例,更深入地理解其工作原理和使用方法。
1. **使用StaticLayout**:对于大量文本,使用`StaticLayout`可提高渲染效率。 2. **避免动态设置属性**:在`onCreate()`之外设置`TextView`属性,否则可能影响性能。 3. **合理使用LayoutParams**:确保`TextView`...
Android StaticLayout 是 Android 中处理文字换行的一个工具类,已经实现了文本绘制换行处理。StaticLayout 可以将文字转化为图片效果,实现的效果类似我们常见的长微博效果。下面是关于 Android 利用 StaticLayout ...
- 在Android中绘制多行文本,可以使用`StaticLayout`或`DynamicLayout`类。这两个类可以帮助你自动换行并管理文本的布局。首先,创建一个`SpannableString`或`Editable`对象,然后使用`new StaticLayout(text, ...
5. 文字编辑:添加文字到图片上,可以使用TextPaint和StaticLayout或CustomView来实现。TextPaint负责设置字体、颜色、大小等属性,StaticLayout则负责布局和换行。用户可以输入文本,应用样式,然后在Canvas上绘制...
6. **文字排列**:对于多行文本,可以使用`Layout`类来帮助管理,如`StaticLayout`或`DynamicLayout`,它们可以自动处理行间距、换行等问题。 7. **文字阴影**:`Paint.setShadowLayer(float radius, float dx, ...
如果你需要绘制多行文本,可以使用`StaticLayout`或`DynamicLayout`来自动计算每一行的布局和换行。 在博客的源码中,可能会展示如何结合`Path`和`Paint`来实现一些高级的文本效果,例如自定义的文本路径绘制(沿着...
总之,StaticLayout是Android开发者手中的一个重要工具,它提供了对文本布局的精细控制,并优化了文本绘制的效率,尤其适用于那些需要高效处理文本的场景。理解和熟练使用StaticLayout能够提升Android应用的用户体验...
此外,如果跑马灯中包含多行文本,我们可能需要使用`StaticLayout`或`DynamicLayout`来处理换行。 为了提供更灵活的使用,我们可以为`MarqueeView`添加一些可配置的属性,比如滚动速度、是否自动启动、文本颜色等。...
在处理大量文本时,应关注性能优化,如使用 `android:inputType` 限制输入类型,避免不必要的测量和布局计算,使用 `StaticLayout` 或 `DynamicLayout` 提高绘制效率。 ### 9. 自动缩放与动态调整 TextView 支持...
总的来说,Android的`drawText()`方法是绘制文本的基础工具,配合`Paint`对象和不同的布局类,开发者可以实现丰富的文本渲染效果。深入了解这些概念和技术,将有助于提升你的Android图形编程能力。
3. **处理文字布局**:使用`Layout`类(如`StaticLayout`或`BoringLayout`)来控制文字的换行和排列。在竖直排版中,需要修改布局的计算方式,使其根据新的坐标系进行换行。 4. **处理滚动**:在`onMeasure()`和`...
此外,可以使用`android:drawableLeft`、`android:drawableRight`等属性在文本旁添加图片,实现图文混排。 除了基本属性,TextView还提供了丰富的API接口。例如,可以使用`setText()`方法动态改变文本内容,`...
`StaticLayout`是Android提供的一种用于构建和管理不可变文本布局的类,它可以自动处理文本换行、对齐方式、行间距等复杂情况。 在添加文本模式的过程中,我们首先需要定义一个枚举常量来表示不同的编辑模式,例如`...
- 如果气泡内容包含多个行,需要使用`StaticLayout`或`DynamicLayout`来处理换行。 4. **动画效果**: - 可以添加进入和退出动画,如渐显渐隐、滑动进出等,提升用户体验。使用`ObjectAnimator`或`ValueAnimator`...
本文将深入探讨如何使用源码无图片方式实现聊天泡泡的绘制,这在资源有限或需要高度定制的情况下尤其有用。 首先,我们要理解聊天泡泡的基本结构。通常,聊天泡泡由一个圆形或椭圆形的背景,以及一个指向特定方向的...