2012年02月22日

ログ(Log)の出力


Androidには標準でログを出力する機能がありデバッグをおこなう際に便利です
ログとは画面上やユーザー操作を開発者に通知するツールで
通常、製品などの完成品には搭載していない
(搭載してあってもユーザーは普通見ることができない)

ログを出力するには・・・
Logを出力するにはLogクラスのメソッドを使用します
ログには4種類のログが存在し
出力するログの種類によって使うメソッドが決まっています
下記のプログラムによってログを出力したいと思います
package blog.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TestActivity extends Activity {
	private static final String TAG = "LogSample";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

			        Log.v(TAG, "VERBOSE");  // 詳細なログの出力
			        Log.d(TAG, "DEBUG");    // デバッグログの出力
			        Log.i(TAG, "INFO");     // 情報ログの出力
			        Log.w(TAG, "WARN");     // 警告ログの出力
			        Log.e(TAG, "ERROR");    // エラーログの出力

    }

}
Logの第1引数にはログの発生源を示す文字列を指定し
(今回はLogSampleという文字列を使用)
第2引数にはログに出力したいメッセージを指定します

どこにログが出力されたかというと・・・
ログを見るにはLogCatを使用します
eclipseの上部メニューのウィンドウから
→ビューの表示→Logcatを選択します
tag02.png
これでLogCatの表示ができますが
これはシステムが出力するすべてのログが表示されている状態です
tag03.png
そこで自分が任意に出力させたログだけを見たい時のために
フィルターを作ります
LogCatの左側のSaved Filterのプラスボタンを押します
tag04.png
ボタンを押すとこのポップアップウィンドウが出てきますので
フィルター名に自分の好きなフィルター名を(今回はTAG)
by Log Tagに先ほど設定したTAGの内容を
(今回はLogSampleとしていた)を入力します
tag05.png
OKを押すと新しいフィルターができます
今回作成したフィルターはTAGがLogSampleもののみを表示するようになっています
tag06.png

スポンサードリンク

posted by kenken at 17:26 | Comment(0) | TrackBack(0) | 開発補助 基本編 | このブログの読者になる | 更新情報をチェックする
2012年02月10日

手書き入力を行う(1)


手書き入力を行うために・・・
onTouchEventを取得する
今回は応用編
前回説明のPathを利用して手書き入力を行いたいと思います
Pathによる線の描画
まずはViewクラスの独自クラスを作成するところまでは同じです
Viewクラスへのグラフィックの描画
その中には描写を担当するViewメソッドがありますが
今回はその中にonTouchEventを追加します
		 //イベントのタイプごとに処理を設定  
		 public boolean onTouchEvent(MotionEvent e){  
			switch(e.getAction()){
			case MotionEvent.ACTION_DOWN: //最初のポイント  
			//押された時のイベント記入
			break;  
			case MotionEvent.ACTION_MOVE: //途中のポイント  
			//そのまま移動時のイベント記入
			break;  
			case MotionEvent.ACTION_UP: //最後のポイント  
			//離された時ののイベント記入
			break;  
			default://その他
				break;  
			}  
			return true;  
		}  
onTouchEventは画面がタッチされた時、そのまま移動したとき、離した時のイベントをそれぞれ取得します
MotionEvent.ACTION_DOWN:・・・タッチされた時
MotionEvent.ACTION_MOVE:・・・移動したとき
MotionEvent.ACTION_UP:・・・離したとき

押された場所を取得する
押された場所はe.getX();およびe.getY();でそれぞれx座標・y座標を取得します
まずはfloatで変数を定義します
    	 private float pos_x = 0f; //イベントが起きたX座標  
    	 private float pos_y = 0f; //イベントが起きたY座標  
タッチされた時に座標を取得し
moveToで移動します
				pos_x = e.getX();//x座標取得
				pos_y = e.getY();//y座標取得
				//押されたPointに移動
				path.moveTo(e.getX(), e.getY());
移動中は同様に取得し今度は
lineToで線を描きます
				pos_x = e.getX();  
				pos_y = e.getY();  
				path.lineTo(pos_x, pos_y);  
				invalidate();
path.lineToでpathに入れた後にinvalidate();
でonDrawで描写します

Viewの状態を保存するためのBitmapを作成
最後に指が離れたときにbitmapとして保存させます
まずはbitmapを新規で作成します
 //Viewの状態を保存するためのBitmap
private Bitmap bitmap = null;
次に
setDrawingCacheEnabled(); を使用しキャッシュ機能をオンにして画面状態を保持します
保持した画面をbitmapに保存し再びキャッシュ機能をオフにすることで保存が可能です
				path.lineTo(e.getX(), e.getY());  
				//キャッシュの中からキャプチャを作成するので、その一瞬の為にキャッシュをON  
				setDrawingCacheEnabled(true);  
				bitmap = Bitmap.createBitmap(getDrawingCache());  
				setDrawingCacheEnabled(false);

まとめ
1.タッチされたポイントにmoveTo
2.移動中はlineToで描き続ける
3.離されたときにbitmap保存
4.onDrawで描写の設定
となります
以下に全体を載せますんで参考に・・・
package draw.test;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
 
public class DrawActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //カスタムビューを表示
        setContentView(new CustomView(this));
        }
    }

     
    //独自クラス
    class CustomView extends View {
    	 private float pos_x = 0f; //イベントが起きたX座標  
    	 private float pos_y = 0f; //イベントが起きたY座標  
    	 
    	 private Path path = null; //パス新規作成  
    	 private Bitmap bitmap = null; //Viewの状態を保存するためのBitmap  
		 public CustomView(Context context) {
		     super(context);
		     setFocusable(true);
		 }
		
		 //イベントのタイプごとに処理を設定  
		 public boolean onTouchEvent(MotionEvent e){  
			switch(e.getAction()){
			case MotionEvent.ACTION_DOWN: //最初のポイント  
				path = new Path();//pathを新規作成
				pos_x = e.getX();//x座標取得
				pos_y = e.getY();//y座標取得
				//押されたPointに移動
				path.moveTo(e.getX(), e.getY());
			break;  
			case MotionEvent.ACTION_MOVE: //途中のポイント  
				pos_x = e.getX();  
				pos_y = e.getY();  
				path.lineTo(pos_x, pos_y);  
				invalidate();  
			break;  
			case MotionEvent.ACTION_UP: //最後のポイント  
				path.lineTo(e.getX(), e.getY());  
				//キャッシュの中からキャプチャを作成するので、その一瞬の為にキャッシュをON  
				setDrawingCacheEnabled(true);  
				bitmap = Bitmap.createBitmap(getDrawingCache());  
				setDrawingCacheEnabled(false);  
				invalidate();  
			break;  
			default://その他
				break;  
			}  
			return true;  
		}  
		
		 protected void onDraw(Canvas canvas) {
		     super.onDraw(canvas);
		     if(bitmap != null){  
		    	 canvas.drawBitmap(bitmap, 0, 0, null);  
		    	 }  
			//この間にグラフィック描画のコードを記述する
			Paint paint = new Paint();
			//色を設定
			paint.setColor(Color.YELLOW);
			//線の太さを指定
			paint.setStrokeWidth(5);
			//線を滑らかに書く
			paint.setAntiAlias(true);
			//線で描く
			paint.setStyle(Paint.Style.STROKE);
			//端点を丸く
			paint.setStrokeCap(Paint.Cap.ROUND);
			//つなぎ目を丸く
			paint.setStrokeJoin(Paint.Join.ROUND);
			//pathを描写
			 if(path != null){  
				 canvas.drawPath(path, paint);  
				 }  
		     //終了
        }
    }
draw13.png
スポンサードリンク