我想根据文本的长度创建一个正方形,并能够旋转它。我已经扩展了textview并更改了onMeasure,但是当我旋转它时,文本会在方块的上半部分绘制。当它开始旋转时,文本不会围绕它自己的中间点旋转。
下图显示红色当前情况的结果和绿色的所需情况。黄点是枢轴点。
非常感谢你的帮助!
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyTextView extends TextView {
private int angle = 0;
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(),getMeasuredWidth());
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
canvas.rotate(angle, canvas.getWidth()/2f, canvas.getHeight()/2f);
getLayout().draw(canvas);
canvas.restore();
}
public void setAngle(int textAngle) {
angle = textAngle;
}
}
答案 0 :(得分:2)
看起来有两个问题。
一个重力不是中心所以当它旋转时它不会在你期望的地方。
另一个问题是你希望它围绕视图大小而不是画布大小旋转。见下文。
请注意,您可能需要进行一些调整,因为我没有考虑填充。
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;
public class MyTextView extends TextView {
private int angle = 75;
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setGravity(Gravity.CENTER);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
canvas.rotate(angle, this.getWidth() / 2f, this.getHeight() / 2f);
super.onDraw(canvas);
canvas.restore();
}
public void setAngle(int textAngle) {
angle = textAngle;
}
}