2012年6月15日金曜日

Androidで縦書き5:禁則処理を考える

。だけを考えてみる。

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class TategakiActivity extends Activity {

 public class CustomView extends View {
  private int width;
  private int w;
  private Paint paint;

  public CustomView(Context context) {
   super(context);
   setFocusable(true);
  }

  protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   int textCount = 40;//一行の文字数
   
   //キャンバスサイズの取得
   int height = canvas.getHeight();// 800ピクセル
   width = canvas.getWidth();// 480ピクセル

   paint = new Paint();
   paint.setAntiAlias(true);

   paint.setColor(Color.WHITE);
   paint.setTextSize(20);
   
   String text = " 親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。";
   int textLength = text.length();
   System.out.println( text.length() );
   
   //必要な行数
   int line = textLength / textCount ;//1
   int linePlus = textLength % textCount;
   System.out.println( line + "::" + linePlus );
   
   int low = height / textCount;//固定値 20 文字の高さ
   w = low ;//上からの位置 変化する 20
   int moveText = 0;
   for ( int j = 1 ; j < 3 ; j++ ){
    for (int i = 0 ; i < 40 ; i++ ) {
     String moji = String.valueOf(text.charAt( moveText ));
     //描画と禁則処理
     drawCanvas(canvas,moji,j);
     moveText += 1;
     w = w + low;
    }
     w = low ;
   }
  }
/*
 * 描画と禁則処理
 */
  private void drawCanvas(Canvas canvas, String moji, int j) {
   // TODO 自動生成されたメソッド・スタブ   
   if ( !moji.equals("。")  ){
    canvas.drawText( moji , width-20*j, w, paint);
   }else{
    canvas.save();
    canvas.rotate(180, width-20*j+10, w-7);//角度 中心x 中心y
    canvas.drawText( "。" ,  width-20*j, w, paint);
    canvas.restore();
   }

  }
 }
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ステータスバー削除    
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
  
  // タイトルバーの削除    
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  
  View drawView = new CustomView(this);
  setContentView(drawView);
 }
}

今度は WebView で縦書きにしてみる。

関連記事

0 件のコメント:

コメントを投稿