ここでの全体的な問題は、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 が計算されます。