利用canvas画text时的换行实现

private void drawText(String str,Paint pa,Canvas ca) {

float[] widths ;

float toalwidth = 0 ;

int mTextXPoint  = 10 ; //text的起始点X

int mTextYPoint = 10 ;  //text的起始点Y

widths = new float[50];

int index = 0;

int count = 1 ;

float height = pa.getTextSize();

pa.getTextWidths(str, widths);

for(int i=0 ;i< 50 ;i++) {

Log.e(TAG, "toalwidth =" + toalwidth);

toalwidth = toalwidth + widths[i] ;

if((( mWidth -20 ) < toalwidth) || (widths[i] == 0)) {

String text = str.substring(index, i);

Log.e(TAG, "text =" + text +"  i=" +i +"  index=" +index);

index = i;

if(toalwidth >( mWidth -20 ) ) {

ca.drawText(text, mTextXPoint , mTextYPoint + count *(height + 10), pa);

}else 

ca.drawText(text, (mWidth - toalwidth )/2 , mTextYPoint + count *(height + 10), pa);//mWidth 是屏幕的宽度。保证居中

count ++ ;

toalwidth = 0 ;

if(widths[i] == 0)

return ;

}

}

}

Listbox控件本身不支持自动换行,但是你可以通过一些小技巧来实现自动换行的效果。其中一种方法是使用多个Listbox控件来实现,每个控件只显示一行,然后通过编程的方式来实现自动切换到下一个Listbox控件。 另一种方法是利用Tkinter中的Canvas控件来实现自动换行的效果。你可以在Canvas控件中创建一个Text控件,并在其中添加文本。当文本超出Canvas控件的宽度,就自动换行到下一行。你可以使用Canvas控件的scrollregion属性来设置滚动区域,从而实现滚动显示所有的文本。 下面是一个例子来演示如何使用Canvas控件实现自动换行的效果: ```python from tkinter import * root = Tk() canvas = Canvas(root, width=200, height=100) canvas.pack() text = Text(canvas, wrap=WORD) text.insert(END, "这是第一行文本,它很长,会自动换行到下一行。\n这是第二行文本,它也很长,会自动换行到下一行。\n这是第三行文本,它还是很长,会自动换行到下一行。") text.pack() # 设置Canvas控件的滚动区域 canvas.config(scrollregion=canvas.bbox("all")) # 绑定Canvas控件的滚动事件 def scroll(event): canvas.yview_scroll(int(-1 * (event.delta / 120)), "units") canvas.bind_all("<MouseWheel>", scroll) root.mainloop() ``` 这个例子中创建了一个Canvas控件,并在其中创建了一个Text控件来添加文本。通过设置Text控件的wrap属性为WORD,可以实现自动换行的效果。然后通过配置Canvas控件的scrollregion属性,把整个文本的区域设置为滚动区域,从而实现滚动显示所有的文本。最后通过绑定Canvas控件的滚动事件,实现鼠标滚轮滚动的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值