android canvas.getClipBounds

本文介绍了两种获取Canvas绘图区域边界的方法:一种是通过传递参数的方式设置目标矩形区域;另一种则是直接获取整个Canvas的边界大小。这两种方法适用于不同的应用场景。
 一种是传参数:
rect dstrect = new rect();
canvas canvas = holder.lockcanvas();<br> canvas.getclipbounds(dstrect);
一种没有参数的
dstrect <span style='font-family: "courier new"; color: #000000;'>=</span><span style='font-family: "courier new"; color: #000000;'>canvas.getclipbounds();</span>
此时dstrect 大小为canvas的大小
package com.example.layoutdome.view; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import androidx.appcompat.widget.AppCompatTextView; public class VerticalTextView extends AppCompatTextView { public VerticalTextView(Context context) { super(context); } public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { String text = getText().toString(); float textHeight = getPaint().getTextSize(); float fontSpacing = getPaint().getFontSpacing(); float x = getPaddingLeft(); float y = getPaddingTop(); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (c == '\n') { x += textHeight; y = getPaddingTop(); } else { canvas.drawText(String.valueOf(c), x, y, getPaint()); y += textHeight; } } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { String text = getText().toString(); float textHeight = getPaint().getTextSize(); float fontSpacing = getPaint().getFontSpacing(); float totalWidth = getPaddingLeft() + getPaddingRight(); float maxHeight = getPaddingTop() + getPaddingBottom(); float currentY = getPaddingTop(); float currentX = getPaddingLeft(); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (c == '\n') { // 换列 currentX += textHeight; totalWidth = Math.max(totalWidth, currentX); currentY = getPaddingTop(); } else { currentY += textHeight; maxHeight = Math.max(maxHeight, currentY); } } // 最后一行也要算进去 totalWidth = Math.max(totalWidth, currentX + textHeight); int width = (int) Math.ceil(totalWidth); int height = (int) Math.ceil(maxHeight + fontSpacing); setMeasuredDimension(resolveSize(width, widthMeasureSpec), resolveSize(height, heightMeasureSpec)); } } 竖向本应显示两个字,现在成一个了
07-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值