[Android]画面/ボタンのタッチを検出する

画面上のボタンがタッチされると”ボタンがタッチされました”、ボタン以外のエリアがタッチされると”画面がタッチされました”というメッセージを表示します。

ここで”タッチ”というのは、ボタンに指が触っているけど離されていない、押されたままの状態です。
.Net Framework的な言い方だとOnPress()な感じです。


ボタンタッチ時


画面タッチ時(ボタン以外のエリア)




コード

package com.example.test1;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
 
 
public class MainActivity extends Activity {
    Button   btnAddAlerm;
    TextView txtMessage;
 
 
    /**
     * 画面生成時のハンドラ
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        //--------------------
        // 画面レイアウトを作成
        //--------------------
        LinearLayout layout = new LinearLayout( this );
        layout.setOrientation( LinearLayout.VERTICAL );
        setContentView( layout );
 
        //----------------------------
        // テキスト表示欄と、ボタンを画面に追加
        //----------------------------
        txtMessage = new TextView( this );
        txtMessage.setText( "こんにちは" );
        btnAddAlerm = new Button( this );
        btnAddAlerm.setText( "click me" );
        layout.addView( txtMessage );
        layout.addView( btnAddAlerm );
 
        // ボタンタッチ時のイベントを定義
        btnAddAlerm.setOnTouchListener( new BtnAddAlermTouchListener() );
 
    }
 
    /** 画面がタッチされた時のハンドラ
     */
    @Override    
    public boolean onTouchEvent( MotionEvent e ) {
        if ( e.getAction() == MotionEvent.ACTION_DOWN ) {
            txtMessage.setText( "画面がタッチされました" );
        }
        if ( e.getAction() == MotionEvent.ACTION_UP ) {
            txtMessage.setText( "画面から離れました" );
        }
        return true;    
    }
 
 
    /** ボタンがタッチされた時のハンドラ
     */
    private class BtnAddAlermTouchListener implements OnTouchListener {
        @Override
        public boolean onTouch(View v, MotionEvent e) {
            if ( e.getAction() == MotionEvent.ACTION_DOWN ) {
                txtMessage.setText( "ボタンがタッチされました" );
            }
            if ( e.getAction() == MotionEvent.ACTION_UP ) {
                txtMessage.setText( "ボタンから離れました" );
            }
            return true;
        }
    }
}

関連記事

コメントを残す

メールアドレスが公開されることはありません。