Androidプログラミング日記 (仮)  

テキストファイル読み込みその3

あなたは

人目のプログラマーだよ。

Androidプログラミング日記 (仮).

 

 

 

 

いよいよ具現化

前回読み取ったデータを、図形にしてみました。カラーだけは前回のままでは変換がめんどうなので、rgb値にしています。

Stringオブジェクトとして取り込んでいるので、数値の部分を数値に変換してあげます。

 
 
 

ファイル名「Object.text」

box,50,20,0,0,255,circle,30,30,255,0,0,box,50,100,200,200,200,line,200,1,100,100,255

                          

csvファイルのように”,”で区切ってみました。csvファイルも処理出来るように練習がてらこんな感じで設定。

 

ファイル名「InputText2Activity.java」変更なし。

package and.roid.inputtext;

import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.Display;
import android.view.Window;
import android.view.WindowManager;

public class InputText2Activity extends Activity {
	public float disp_w,disp_h;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        Window window = getWindow();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        WindowManager manager = window.getWindowManager();
        Display disp = manager.getDefaultDisplay();
        disp_w = disp.getWidth();
        disp_h = disp.getHeight();
        setContentView(new InputTextView(this));
    }
}
						                      

ファイル名「InputTextView.java」

package and.roid.inputtext;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

import android.R.color;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class InputTextView extends View {

	private InputText2Activity activity;//アクティビティクラスの登録準備
	private String text;//表示文字登録準備
	static private final String FILE_PATH = "object.txt";//ファイルパス
	private Object[] ob = new Object[4];
	private String[][] data = new String[4][6];

	//コンテキスト
	public InputTextView(Context context) {
		super(context);
		initInputText(context);
	}

	//ここでファイル読み込み
	private void initInputText(Context context) {
		//アクティビティクラス登録
		activity = (InputText2Activity)context;

		//ファイル読み込みなど操作するときはtry{}catch{}で囲む
		try{
			//元からあるassetsフォルダに入れたtextファイルを読み込む方法
			AssetManager assets = getResources().getAssets();
			InputStream in = assets.open(FILE_PATH);
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			String str;
			StringBuilder strs = new StringBuilder();
			int i=0;int j=0;
			while ((str = br.readLine()) != null) {
					strs.append(str);
			}
			br.close();
			text = strs.toString();

		}catch (Exception e){
			text = "読み込み失敗";
		}
		StringTokenizer st = new StringTokenizer(text,",");
		for(int i=0;i<4;i++){
			for(int j=0;j<6;j++){
				data[i][j] = st.nextToken();
			}
		}

		//数値にしたい部分にInteger.valueOf()を使用して数値に変換しています
		for(int i=0;i<4;i++){
			ob[i] = new Object(data[i][0],
					50,50+i*150,
					Integer.valueOf(data[i][1]), Integer.valueOf(data[i][2]),
					Color.rgb(Integer.valueOf(data[i][3]), Integer.valueOf(data[i][4]), Integer.valueOf(data[i][5])));
		}
	}

	//Viewを継承させるとここが自動的に呼ばれる
	protected void onDraw(Canvas c){
		setBackgroundColor(Color.WHITE);
		super.onDraw(c);
		Paint p = new Paint();

		p.setAntiAlias(true);
		for(int i=0;i<4;i++){
			ob[i].drawObject(c, p);
		}
	}

}


						                      

 

ファイル名「Object.java」

package and.roid.inputtext;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;

public class Object {
	public static final int BOX = 0;
	public static final int CIRCLE = 1;
	public static final int LINE = 2;
	public float px,py;//オブジェクトの座標
	public int w,h;//オブジェクトの大きさ
	public int col;//オブジェクトのカラー
	public String str;//オブジェクトの形
	public int obstate;//オブジェクトの形(を数値にしておく)

	public Object(String ob,float x,float y,int ww,int hh,int color){
		px = x;
		py = y;
		str = ob;
		w = ww;
		h = hh;
		col = color;
		//ob.equals("xxx")でString値obの中身とequals("xxx")の"xxx"のstring値が同じなら
		//trueを返すメソッドで、これを使ってなんの図形を指定しているか調べて
		//obstateの数値を決めています
		if(ob.equals("box")==true)obstate=0;
		if(ob.equals("circle")==true)obstate=1;
		if(ob.equals("line")==true)obstate=2;
	}

	public void drawObject(Canvas c,Paint p){
		switch(obstate){
		case BOX:
			p.setColor(col);
			c.drawRect(new Rect((int)px,(int)py,(int)px+w,(int)py+h), p);
			break;
		case CIRCLE:
			p.setColor(col);
			c.drawCircle(px, py, w, p);
			break;
		case LINE:
			p.setColor(col);
			c.drawLine(px, py, px+w, py+h, p);
			break;
		}
	}

}



						                      
実行結果
こんな感じに表示できました。

無事にデータから図形に変換できました。

次は書き込みの勉強をしなければ!

 

assetsフォルダに入れたtextファイルを読み込み表示
その1のコードを使用して連続したデータを取り込み分解
今までの読み込みこんだデータを図形に変換してみた!
アプリケーション専用ファイルでの書き込み読み込み
アプリケーション終了→次回起動時までデータの保持
 

 

 

Androidプログラミング日記 (仮) | サイトマップ | 個人情報保護方針 | 応援メールテヘペロ | ©2012 Japan  相互リンク大募集中です