0

我想根据文本的长度创建一个正方形并能够旋转它。我已经扩展了 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;
}
}
4

1 回答 1

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;
    }
}
于 2013-05-20T23:06:40.023 回答