2010年10月26日火曜日

AndroidのView.onDrawで、改行する。

Androidで、カスタムViewを作りたいとき、
Viewクラスのサブクラスを作って、onDrawメソッドをオーバーライドして、
Javaコード上でViewのデザインをしたいときがあります。

で、そんなときに、「文字」を入れたいときがあるのだけれど、
枠内に文字を納めるために、改行を入れないといけない。

だがしかし、AndroidのAPIにはそれらしいモノは、ない。

なので、自分で書いてやらないと行けない。

皆さんも結構書くコードだと思うので、サンプルコードを載せておきますね。

↓な感じです。サンプルのため、パラメータ等もonDrawメソッドに詰め込んであるけれど、適切に、切り貼りしてください。

public class LineBreakInspectView extends View{
public LineBreakInspectView(Context context) {
  super(context);
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  int textSize = 12;
  Paint paint = new Paint();
  paint.setTextSize(textSize);
  paint.setColor(Color.WHITE);
  String message = "僕は、今日も一日、生きてしまいました。答えも出ないまま。しょうがない、で済ましてよいようなことではない。用な気がするが、そんなこと、気にしてられない。";
  int maxWidth = canvas.getWidth();//150pxで改行する。
  int lineBreakPoint = Integer.MAX_VALUE;//仮に、最大値を入れておく
  int currentIndex = 0;//現在、原文の何文字目まで改行が入るか確認したかを保持する
  int linePointY = textSize;//文字を描画するY位置。改行の旅にインクリメントする。

  while
(lineBreakPoint!=0){
   String mesureString=message.substring(currentIndex);
   lineBreakPoint=paint.breakText(mesureString, true, maxWidth, null);
   if(lineBreakPoint!=0){
    String line = message.substring(currentIndex, currentIndex + lineBreakPoint);
    canvas.drawText(line, 0, linePointY, paint);
    linePointY += textSize;
    currentIndex += lineBreakPoint;
   }
  }
 }
}

...。

できるのなら、TextViewを使って組んだ方が良さそうですね。


0 件のコメント:

コメントを投稿