2013-01-12 6 views
9

このテキストを縦書きにする方法は?テキストを90度回転させる方法は? それぞれの手紙を個別に書くのはばかだが、今は別の方法が分からない。キャンバスの方向性の方向

単にテキスト(または何かを)回転
Paint paint = new Paint(); 
public DrawView(Context context, double arr[]) 
{ 
    super(context); 
    paint.setColor(Color.BLACK); 
} 
    @Override 
    public void onDraw(Canvas canvas) 
    { 
     canvas.drawText("Test",50, 50, paint); 
    } 
+0

あなたの質問はやや不明確である:あなたが完全なテキストを回転したいです(そう、あなたがそれを読むために「あなたの頭を回す」しなければならない)、またはあなたがお互いの下の文字を持っていたいです(と回転しません)? – Veger

+0

両方のオプションに興味があります –

答えて

28

簡単です:キャンバスを回転させるrotate()メソッドを使用します(その後、それが戻って回転させて、それ以外の場合はあなたが描くすべてが回転してしまう):

canvas.save(); 
canvas.rotate(90f, 50, 50); 
canvas.drawText("Text",50, 50, paint); 
canvas.restore(); 

save()およびrestore()メソッドはそれぞれキャンバスの状態を保存して復元します。残りの要素は回転しません。テキストのみをペイントしたい場合、これらの2つのメソッドは必要ありません。

文字列の文字を互いに置きたい場合は、各文字を別々に処理する必要があります。最初にフォントの高さを取得する必要があります。各文字を描画するときには、この高さのy座標を繰り返し増やす必要があります。

int y = 50; 
int fontHeight = 12; // I am (currently) too lazy to properly request the fontHeight and it does not matter for this example :P 
for(char c: "Text".toCharArray()) { 
    canvas.drawText(c, 50, y, paint); 
    y += fontHeight; 
} 
+0

ありがとうございます!すべては動作していますが、canvas.store()はcanvas.save()を書きます。 –

+0

あなたは歓迎です。私の答えは 'save()'を使うように更新しました! – Veger

+0

有益な答えをありがとう! – myforums

0

正しいバージョンである: キャンバスcanvas_front =新しいキャンバス(bitmap_front)。

Paint paint = new Paint(); 
    paint.setColor(Color.rgb(140, 0, 0)); 
    paint.setAlpha(80); 
    paint.setStrokeWidth(2); 

canvas_front.drawLine(0、(フロート)(frontIV.getHeight()* 0.9)、frontIV.getWidth()、(フロート)(frontIV.getHeight()* 0.9)、塗料)。

canvas_front.save(); 
    canvas_front.rotate((float) 90 , 50, 50); 
    canvas_front.drawText("Text",50, 50, paint); 
    canvas_front.restore(); 
    frontIV.setImageBitmap(bitmap_front); 
関連する問題