`
hzy3774
  • 浏览: 992959 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Android使用StaticLayout实现文本绘制自动换行

 
阅读更多

使用的场景主要是绘制文本的时候指定绘制区域的宽度,文本需要根据宽度自动换行。



使用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);
	}

}

 

 完。

  • 大小: 900.6 KB
分享到:
评论

相关推荐

    Android中用StaticLayout实现文本绘制自动换行详解

    StaticLayout是android中处理文字换行的一个工具类,StaticLayout已经实现了文本绘制换行处理,下面这篇文章主要介绍了Android中用StaticLayout实现文本绘制自动换行的相关资料,需要的朋友可以参考。

    Android文本自动换行(StaticLayoutDemo)

    在Android开发中,文本显示是常见的任务之一,但有时候我们可能会...`StaticLayoutDemo`项目应该包含了使用`StaticLayout`实现自动换行的示例代码,你可以通过学习和研究这个示例,更深入地理解其工作原理和使用方法。

    android textview 文字排版 换行

    1. **使用StaticLayout**:对于大量文本,使用`StaticLayout`可提高渲染效率。 2. **避免动态设置属性**:在`onCreate()`之外设置`TextView`属性,否则可能影响性能。 3. **合理使用LayoutParams**:确保`TextView`...

    Android用StaticLayout实现文字转化为图片效果(类似长微博发送)

    Android StaticLayout 是 Android 中处理文字换行的一个工具类,已经实现了文本绘制换行处理。StaticLayout 可以将文字转化为图片效果,实现的效果类似我们常见的长微博效果。下面是关于 Android 利用 StaticLayout ...

    Android-andriod加文字水印支持配置文字大小倾斜角度多行水印

    - 在Android中绘制多行文本,可以使用`StaticLayout`或`DynamicLayout`类。这两个类可以帮助你自动换行并管理文本的布局。首先,创建一个`SpannableString`或`Editable`对象,然后使用`new StaticLayout(text, ...

    安卓手绘图片处理画板相关-仿美图秀秀实现图片相框贴纸文字编辑滤镜功能相框可以根据所给的点自动生成对应的相框.rar

    5. 文字编辑:添加文字到图片上,可以使用TextPaint和StaticLayout或CustomView来实现。TextPaint负责设置字体、颜色、大小等属性,StaticLayout则负责布局和换行。用户可以输入文本,应用样式,然后在Canvas上绘制...

    android 字符串绘制示例

    6. **文字排列**:对于多行文本,可以使用`Layout`类来帮助管理,如`StaticLayout`或`DynamicLayout`,它们可以自动处理行间距、换行等问题。 7. **文字阴影**:`Paint.setShadowLayer(float radius, float dx, ...

    《android Graphics(二):路径及文字》源码

    如果你需要绘制多行文本,可以使用`StaticLayout`或`DynamicLayout`来自动计算每一行的布局和换行。 在博客的源码中,可能会展示如何结合`Path`和`Paint`来实现一些高级的文本效果,例如自定义的文本路径绘制(沿着...

    StaticLayout

    总之,StaticLayout是Android开发者手中的一个重要工具,它提供了对文本布局的精细控制,并优化了文本绘制的效率,尤其适用于那些需要高效处理文本的场景。理解和熟练使用StaticLayout能够提升Android应用的用户体验...

    android 自定义跑马灯

    此外,如果跑马灯中包含多行文本,我们可能需要使用`StaticLayout`或`DynamicLayout`来处理换行。 为了提供更灵活的使用,我们可以为`MarqueeView`添加一些可配置的属性,比如滚动速度、是否自动启动、文本颜色等。...

    textview 小结

    在处理大量文本时,应关注性能优化,如使用 `android:inputType` 限制输入类型,避免不必要的测量和布局计算,使用 `StaticLayout` 或 `DynamicLayout` 提高绘制效率。 ### 9. 自动缩放与动态调整 TextView 支持...

    源码

    总的来说,Android的`drawText()`方法是绘制文本的基础工具,配合`Paint`对象和不同的布局类,开发者可以实现丰富的文本渲染效果。深入了解这些概念和技术,将有助于提升你的Android图形编程能力。

    Android文字竖直排版TextViewVertical(可横向滚动)(转)

    3. **处理文字布局**:使用`Layout`类(如`StaticLayout`或`BoringLayout`)来控制文字的换行和排列。在竖直排版中,需要修改布局的计算方式,使其根据新的坐标系进行换行。 4. **处理滚动**:在`onMeasure()`和`...

    Android学习笔记四:基本视图组件:TextView

    此外,可以使用`android:drawableLeft`、`android:drawableRight`等属性在文本旁添加图片,实现图文混排。 除了基本属性,TextView还提供了丰富的API接口。例如,可以使用`setText()`方法动态改变文本内容,`...

    Android画板开发之添加文本文字

    `StaticLayout`是Android提供的一种用于构建和管理不可变文本布局的类,它可以自动处理文本换行、对齐方式、行间距等复杂情况。 在添加文本模式的过程中,我们首先需要定义一个枚举常量来表示不同的编辑模式,例如`...

    android 仿QQ 微信聊天气泡 实现

    - 如果气泡内容包含多个行,需要使用`StaticLayout`或`DynamicLayout`来处理换行。 4. **动画效果**: - 可以添加进入和退出动画,如渐显渐隐、滑动进出等,提升用户体验。使用`ObjectAnimator`或`ValueAnimator`...

    无图片,源码实现聊天泡泡,可绘QQ泡泡。

    本文将深入探讨如何使用源码无图片方式实现聊天泡泡的绘制,这在资源有限或需要高度定制的情况下尤其有用。 首先,我们要理解聊天泡泡的基本结构。通常,聊天泡泡由一个圆形或椭圆形的背景,以及一个指向特定方向的...

Global site tag (gtag.js) - Google Analytics