2010-11-23 8 views
4

私はキャンバス(ライブ壁紙)にいくつかの文字列を書き込もうとしていますが、長い文字列はそれを行う方法はありますか?
ライブ壁紙なので、キャンバスは私がこれに使用できる唯一のものだと思います。Androidキャンバスに単語wraped tex

+0

神、それは簡単ではありません、共有する例ですか? –

答えて

11

独自の単語の折り返しを行う必要はありません。

何かこのようなandroid.text.Layoutとそのサブクラスandroid.text.StaticLayoutとandroid.text.DynamicLayoutアウト

チェック:

、これはあなたのために動作するかどう
StaticLayout layout = new StaticLayout(text, txtpaint, textW,Layout.Alignment.ALIGN_NORMAL, 1.3f, 0, false); 
txtcanvas.translate(xoffs, yoffs); //position the text 
layout.draw(txtcanvas); 
+0

私はこれがうまくいくとは分かりません - ドキュメントから:DynamicLayoutは、テキストが編集されると自動的に更新されるテキストレイアウトです。 ウィジェットがテキストレイアウトを制御するために使用します。独自のウィジェットやカスタム表示オブジェクトを実装している場合や、Canvas.drawText()を直接呼び出す必要がある場合を除き、このクラスを直接使用する必要はありません。 この場合、キャンバスを使用するときにCanvas.drawText()を呼び出す必要があるため、これは機能しません。 – ekatz

+1

これは動作します。独自のカスタムウィジェットを実装することは、まさにこの質問についてです。 layout.drawは、書式設定を行った後、おそらくCanvas.drawTextを呼び出します。描画呼び出しにキャンバスで送信することに注意してください。 –

+0

Olof、私はSOのコメントが+ 1や親指のためではないことを知っていますが、あなたの答えに感謝して、正しいツールを何時間も探してくれました。他のみんなに、そうです、これはうまくいきます。 – andreimarinescu

1

わからないけどこのような状況では、単にビューを作成してレイアウトし、その「スクリーンショット」をビットマップに書き込むことが本当に好きです。

この関数は、 "just_a_textview"のparams + xmlレイアウトからビットマップを作成します。

private static Bitmap renderTextIntoBitmap(Context context, Bitmap.Config bitmapConfig, String text, int textColor, int maxTextWidth) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
    TextView tv = (TextView) inflater.inflate(R.layout.just_a_textview, null); 
    tv.setText(text); 
    tv.setMaxWidth(maxTextWidth); 

    int widthSpec = View.MeasureSpec.makeMeasureSpec(maxTextWidth, View.MeasureSpec.EXACTLY); 
    int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 

    tv.measure(widthSpec, heightSpec); 
    tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight()); 
    tv.setTextColor(textColor); 

    Bitmap bitmap = Bitmap.createBitmap(tv.getWidth(), tv.getHeight(), bitmapConfig); 
    Canvas canvas = new Canvas(bitmap); 
    tv.draw(canvas); 
    return bitmap; 
} 

これはすべてのフレームで行いませんが、ビットマップを作成したらキャンバスに描画するのは非常に高速です。これにより、Androidビューのすべての柔軟性が得られます。

テキストが非常に動的な場合はこれが機能しないことがありますが、このようにしてキャンバスマトリックスを使用してスケーリング/回転を行うことができます。 これは、パフォーマンスのためにさらに最適化することができます。レイアウトの膨張を引き出すことによって。

関連する問題