我认为这里的整个问题是您正在使用 WRAP_CONTENT。当您这样做时,视图的剪辑矩形是文本内容的大小。解决问题的最简单方法是使用填充。像这样的东西,对我来说很好:
<com.example.twistedtext.TwistedTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="30dp"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
twistedtext:rotation="30.0f"
android:text="@string/hello_world" />
当然,如果你这样做,你将不得不为每个内容选择一个稍微不同的填充。如果您不能这样做,请覆盖 onMeasure,这样就可以完全按照 TextView 的 onMeasure 所做的那样,然后根据需要添加相应的填充以进行旋转。
后来补充:实际上,这很有趣。我有以下onMeasure,效果很好:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int w = getMeasuredWidth();
int h = getMeasuredHeight();
w = (int) Math.round(w * cosA + h * sinA);
h = (int) Math.round(h * cosA + w * sinA);
setMeasuredDimension(w, h);
}
唯一剩下的问题是文本会根据旋转前的尺寸进行换行。你也必须解决这个问题......
设置 mAngle 时计算 sinA 和 cosA。