テクパー2020
テクニカルヘルパー


 アンドロイドアプリ開発 

◆ その他イベントの取得
・ タップ、ダウン、フリック(軽く打つ)、長押し、スクロール、プレスのイベントを取得(処理)します

1.新規プロジェクトで 「 OtherAction 」 を新規に作成します

1)ファイル(F) → 新規(N) → プロジェクト(P)

2)Android の Android プロジェクト を選択し、[次へ(N)]ボタン をクリック
・プロジェクト名に 「 OtherAction 」 を入力
・ビルド・ターゲットの □ Android 2.2 を チェック (最新のバージョン)
・アプリケーション名に 「 OtherAction 」 を入力
・パッケージ名に 「 任意のドメイン名 」 を入力 (ドメイン名をパッケージ名に利用)
・□ Create Activityがチェック状態で、名称に 「 OtherAction 」 を入力
・[完了]ボタン をクリック

2.Viewクラス 「 OtherActionView 」 を新規に作成します

1)srcのパッケージ上で右クリック → 新規(W) → クラス
・名前(M)に 「 OtherActionView 」 を入力
・スーパークラス(S)に 「 android.view.View 」 を入力
・[完了]ボタン をクリック

(プロジェクトの構成)


3.生成された 「 OtherActionView 」 を書き換え
package com.proto.otheraction;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class OtherActionView extends View
                             implements GestureDetector.OnGestureListener,
                                        GestureDetector.OnDoubleTapListener {
    private ArrayList info;
    private GestureDetector gestureDetector;

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

        // 背景色の指定 (android.graphics.Colorの定義)
        setBackgroundColor(Color.WHITE);

        // 操作イベント取得情報の生成
        info=new ArrayList();
        info.add("操作イベントの取得情報");

        // ジェスチャーディテクター(身振り検出)の生成
        gestureDetector=new GestureDetector(context,this);

        // フォーカス指定(タッチ操作受け取り)
        setFocusable(true);

    }

    //描画
    @Override 
    protected void onDraw(Canvas canvas) {

    // 描画オブジェクトの生成
    Paint paint=new Paint();
    paint.setAntiAlias(true);       // 文字の縁を滑らかに描く
    paint.setTextSize(18);          // 文字サイズ
    paint.setColor(Color.MAGENTA);  // 文字色
        
        // 操作イベント取得情報の描画
        for (int i=0;i30) info.remove(info.size()-1);
    }

    // タッチイベントの処理
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //ジェスチャーディテクターの処理
        gestureDetector.onTouchEvent(event);
        return true;
    }

    // ダウンイベントの処理
    public boolean onDown(MotionEvent e) {
        addInfo("Down");
        return false;
    }

    // 長押しイベントの処理
    public void onLongPress(MotionEvent e) {
        addInfo("LongPress");
    }

    // フリック(軽く打つ)イベントの処理(速度単位はPixel/秒)
    public boolean onFling(MotionEvent e0,MotionEvent e1,
        float velocityX,float velocityY) {
        addInfo("Fling("+velocityX+","+velocityY+")");
        return false;
    }

    // スクロールイベントの処理
    public boolean onScroll(MotionEvent e0,MotionEvent e1,
        float distanceX,float distanceY) {
        addInfo("Scroll("+distanceX+","+distanceY+")");
        return false;
    }

    // プレスイベントの処理(down後moveなし)
    public void onShowPress(MotionEvent e) {
        addInfo("ShowPress");
    }

    // シングルタップアップ(完了)イベントの処理
    public boolean onSingleTapUp(MotionEvent e) {
        addInfo("SigngleTapUp");
        return false;
    }

    // ダブルタップイベントの処理
    public boolean onDoubleTap(MotionEvent e) {
        addInfo("DoubleTap");
        return false;
    }

    // ダブルタップイベントイベントの処理(down,move,up含む)
    public boolean onDoubleTapEvent(MotionEvent e) {
        addInfo("DoubleTapEvent");
        return false;
    }

    // シングルタップイベントの処理
    public boolean onSingleTapConfirmed(MotionEvent e) {
        addInfo("SingleTap");
        return false;
    }

}


4.「 OtherAction 」 を書き換え
package com.proto.otheraction;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
//import android.view.Window;

public class OtherAction extends Activity implements Runnable {

    private OtherActionView otheractionView;
    private Handler handler;

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ウィンドウタイトルの非表示
        // requestWindowFeature(Window.FEATURE_NO_TITLE);

        // setContentView(R.layout.main);  書き換え
        otheractionView=new OtherActionView(this);
        setContentView(otheractionView);

    }

    // アプリの再開
    @Override
    public void onResume() {
        super.onResume();
        handler=new Handler();
        handler.postDelayed(this,0);
    }    

    // アプリの一時停止
    @Override
    public void onPause() {
        super.onPause();
        handler.removeCallbacks(this);
        handler=null;
    }    

    // 実行アプリ
    public void run() {
        otheractionView.invalidate();
        if (handler!=null) handler.postDelayed(this,100);
    }

}


・機能の説明
public class OtherActionView extends View
                             implements GestureDetector.OnGestureListener,
                                        GestureDetector.OnDoubleTapListener {

implements GestureDetector.OnGestureListener,
                GestureDetector.OnDoubleTapListener の追加
public class OtherAction extends Activity implements Runnable {

implements Runnable の追加
android.view.GestureDetector  のGestureDetectorクラス

// ジェスチャーディテクター(身振り検出)
public GestureDetector (Context context, GestureDetector.OnGestureListener listener) 
android.view.View  のViewクラスでイベントの処理

// タッチ画面のイベント処理
public boolean onTouchEvent (MotionEvent event) 
android.view.GestureDetector.SimpleOnGestureListener  でイベントの処理

// ダブルタップのイベント処理
public boolean onDoubleTap (MotionEvent e) 

// ダブルタップダウン移動のイベント処理
public boolean onDoubleTapEvent (MotionEvent e) 

// ダウンのイベント処理
public boolean onDown (MotionEvent e) 

// フリック(軽く打つ)のイベント処理
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 

// 長押しのイベント処理
public void onLongPress (MotionEvent e) 

// スクロールのイベント処理
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 

// プレスのイベント処理
public void onShowPress (MotionEvent e) 

// シングルタップのイベント処理
public boolean onSingleTapConfirmed (MotionEvent e) 

// シングルタップアップ(完了)のイベント処理
public boolean onSingleTapUp (MotionEvent e) 


5.プロジェクトの実行(実行構成の作成は、「プロジェクトの新規作成」を参照)
1)実行(R) → 実行(R)
(操作されたイベントを表示する)


Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.