MEMO

【Validity】
1 妥当(性), 正当(性), 有効(性), 効力
2 (法律的な)有効(性), 適法(性), 合法(性)

【certificate】
1 (…の)証明書, (保)証書, 検定証((of ..., that節))
3 《法律》認証, 公証, 証明文言.

【confirm】
1〈陳述・証拠などを〉真実[正当, 正確]だと立証する, 確証する
2〈契約・協定などを〉(正式に)承認する, 裁可する;〈条約を〉批准する

【syntax】
1《言語学》統語論, 統辞論, 構文論, シンタクス
2《論理学》統語論;その特定言語への適用.
3 系統的配列.

eclipseでapkファイルの作成
2010年9月17日[金]
apkにしたいプロジェクトを右クリック
[Export][Android][Export Android Application][Next][Create new keystore]
Locationに保存先を指定、passwordを設定
Confirmでpasswordの確認
Validityで適用年数(?)を指定
First and Last Name に名前を入力
[Finish]でapkファイルが作成される
キー押下イベントの解説
2010年9月9日[木]
□□PushEventクラス□□

package net.Push;

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

public class PushEvent extends Activity {
    /**初期化**/
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(new BoundView3(this));
    }
        
}

□□PushViewクラス□□

package net.Push;

import android.content.res.Resources;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.*;

//サーフェイスビューの利用
public class PushView extends SurfaceView 
    implements SurfaceHolder.Callback,Runnable {//(1)
    private SurfaceHolder holder;//サーフェイスホルダー
    private Thread        thread;//スレッド
    private Bitmap	image;//イメージ
    private boolean keyDownFlg; // キー押下フラグ
    private int		myKey;		// キー情報

//keyDownFlgを見て押してあるかどうか判断する

    //コンストラクタ
    public PushView(Context context) {
        super(context);

        //画像の読み込み
        Resources r = getResources();
        image=BitmapFactory.decodeResource(r,R.drawable.sample00);  
                
        //サーフェイスホルダーの生成(2)
        holder=getHolder();
        holder.addCallback(this);
        holder.setFixedSize(getWidth(),getHeight());

        // 最初はキーが押されていない
	keyDownFlg = false;
        // -1 = キーが押されていないことを表す
	myKey = -1;
        
//【フォーカスをここに記述する理由】
//ここに書くと必ず呼ばれる(実行忘れを防ぐ)

	//フォーカス
        setFocusable(true);     
        setFocusableInTouchMode(true);
    }

    //サーフェイスの生成(1)
    public void surfaceCreated(SurfaceHolder holder) {
        //スレッドの開始(3)
        thread=new Thread(this);
        thread.start();
    }

    //サーフェイスの変更(1)
    public void surfaceChanged(SurfaceHolder holder,
        int format,int w,int h) {
    }   
    
    //サーフェイスの破棄(1)
    public void surfaceDestroyed(SurfaceHolder holder) {
        thread=null;
    }
     
    //スレッドの処理
    public void run() {
        Canvas canvas;
       
        // 無限ループ開始
	//(thread!=null) ←無限を抜けるため
	//↑「いつか?」サーフェイスが破棄されたとき
	//.Callbackをインクリメント
	//.Runnable必要
	//threadが実行されるからRunが呼ばれる

        while(thread!=null) {
            
         // ロック
            canvas=holder.lockCanvas();
	 // 背景色
            canvas.drawColor(Color.WHITE);
         // 描画処理
            if( keyDownFlg ){
            	canvas.drawBitmap(image, 0 , 0, null);
            }
            // アンロック
            holder.unlockCanvasAndPost(canvas);

            //スリープ(5)
            try {
                Thread.sleep(100);
            } catch (Exception e) {
            }
        }
    }
    
    // キー押下イベント
    @Override
    public boolean onKeyDown( int keyCode, KeyEvent event ){
    	// 1キーが押されているか?
    	if( keyCode == KeyEvent.KEYCODE_1 ){
    		//
	if( keyCode != myKey ){
    			//キー情報の更新!
		myKey = keyCode;
            	// 
		keyDownFlg = !keyDownFlg;
    		}
    	}
    	return super.onKeyDown( keyCode, event );
    }

    //キー離したイベント
    @Override
    public boolean onKeyUp( int keyCode, KeyEvent event ){
    	//キー情報の更新
	myKey = -1;

    	return super.onKeyUp( keyCode, event );
    }
}

newをするとその時点でメモリが確保される
2010年9月10日[金]
//パターン「1」
view = new MediaPlayerView(this);
setContentView(view);

startSound();
stopSound();
をViewを挟んで呼び出し


//パターン「2」
setContentView(new MediaPlayerView(this));
//Activityが実体の場所を知る術がない
//直接 new を書いてしまうと実体を受ける事ができないので
//実行できない(音が止められない)
//0X0001,0X0002を受ける場所がない

放物線の動き
2010年9月9日[火]

速度

 vx を x 方向の速度、dx を時間 dt の間に進む x 方向の距離
  dx=vx*dt ;速度の定義より

力と加速度

  質量 * 加速度 = 力  :ニュートンの法則

空中のボールの動き

 水平、垂直方向の移動距離

y方向の速度をvy、x(水平)方向の速度をvx、とすると、
dt時間で移動するx、y方向の距離dx、dyは
  dy = vy * dt
  dx = vx * dt

x,y方向の初速度: vx0 vy0 
初速度をv、投角度 θ
  vx0=v*cos(θ)、vy0=v*sin(θ)

 t 秒後の速度変化
  vy(t)=vy0 - g * dt

 最高点に達する時刻 t
  t=vy0/g=v・sin(θ)/g 

速度と位置の計算(理論値)

 t秒後の水平方向の位置x(t)
  x(t)=vx0 * t

 dtでの移動距離
  vy(t)*dt = (vy0-g*t)*dt = vy0*dt - g*t*dt

 実際の移動距離
  y(t)=vy0*t - (1/2)*g*t*t 

 水平方向の到達距離
  x = vx0*t = 2*vy0*vx0/g = 2*v*v*sin(θ)*cos(θ)/g

最大到達距離

 到達距離は   2*v*v*sin(θ)*cos(θ)/g 

  2sin(x)cos(y) = sin(x+y) + sin(x-y),
 x=y とすると、 2sin(x)cos(x) = sin(2*x)

 右辺は、2*x = 90度 のとき最大、sin(x)cos(x)は x=45度のとき最大値1
 したがって、最大到達距離は  2*v*v/g

 veを初速度、vx0、vy0をX,Y方向の初速度とすると
  vx0=ve*(float)cos((3.14/180.0)*θ);
  vy0=ve*(float)sin((3.14/180.0)*θ);

 重力の加速度をg、計算する時間間隔dt
   x = x + vx * dt;//位置変化
  y = y + vy * dt;
  vy = vy - g * dt;//速度変化


--SAMPLE CODE--
{
// 軌跡の計算
 float ve,angle,vx0,vy0;
 float g,dt,t1,t,x,y,vx,vy; 
 //速度設定、角度読み込み、初速度計算
 ve=30.0;
 vx0=ve*(float)cos((3.14/180.0)*angle);
 vy0=ve*(float)sin((3.14/180.0)*angle);

 //重力加速度、刻み時間、落下時刻
 g=9.8f;
 dt=0.01f;
 //初期設定
 x=0;y=0;
 vx=vx0;vy=vy0;

 for( t=0.0;y>=0;t=t+dt){
  x = x + vx * dt;//位置変化
  y = y + vy * dt;
  vy = vy - g * dt;//速度変化
 }
}




インタフェース
2010年9月6日[月]
インタフェースとは、メソッドの宣言のみを並べたクラスのようなもの。
クラスはインタフェースを実装することによって、
インタフェースに対しての呼び出しを受信できるようになる。
インタフェースを実装するには、implementsを用いて以下のように定義する

  class   クラス名   implements   インタフェース名

クラスが継承を使っている場合は以下のように記述

  class   クラス名   extends   親クラス名   implements インタフェース名

インタフェース名は、カンマ(,)区切りで複数指定することも可能。
また、インタフェースを実装したクラスは、インタフェースで定義されている
メソッド全てを定義する必要がある。
ダブルバッファリング
2010年9月6日[月]
描画命令を実行ごとに画面に反映させるのではなく、
複数の描画命令をまとめて画面に反映させることで、画面のチラつきを防ぐ処理。

使い方は、描画前にSurfaceHolderクラスのlockCanvas()メソッドで
描画用のCanvasオブジェクトを取得し、描画処理後、unlockCanvasAndPost()メソッドを呼ぶ。
unlockCanvasAndPost()メソッドを読んだ時に、
Canvasオブジェクトに描画した内容が実画面に反映される。
スリープ
2010年9月7日[火]
数ミリ秒間プログラムの処理を止めたい時は、
Threadクラスのsleep()メソッドを使う。
このメソッドは例外を投げるのでtryとcatchで囲む必要がある。
例外を捕まえた時の処理は空で問題ない。

1秒 = 1000秒

ミリ→マイクロ→ナノ→ピコ
ページのトップへ
inserted by FC2 system