[Android]View応答画面タッチイベント

2765 ワード

クリックイベントに応答するには、setOnClickListenerで実現するのが一般的ですが、タッチして指を離すイベントに応答する必要がある場合があります.
OnTouchListenerで実現可能
次のコードは、LayoutをタッチしたときにLayoutの背景色を白に変更し、離れたときに元の背景色を復元することを実現します.
JAvaコード
import android.app.ActionBar;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.os.Handler;
import android.os.Message;
import java.io.IOException;


public class SelfInfoActivity extends ActionBarActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_myinfo);

        View baseinfo = (RelativeLayout)findViewById(R.id.lo_baseinfo);
        /*
        baseinfo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                v.setBackgroundColor(Color.WHITE);
            }
        });*/
        baseinfo.setBackgroundColor(Color.GRAY);
        final TextView tv_baseinfo = (TextView)findViewById(R.id.baseinfo);
        baseinfo.setOnTouchListener(
                new View.OnTouchListener() {
                    public boolean onTouch(View v, MotionEvent e) {
                        switch(e.getAction()) {
                            case MotionEvent.ACTION_DOWN:
                                v.setBackgroundColor(Color.WHITE);
                                tv_baseinfo.setText("action down");
                                break;
                            case MotionEvent.ACTION_UP:
                                v.setBackgroundColor(Color.GRAY);
                                tv_baseinfo.setText("action up");
                                break;
                        }
                        return true;
                    }
                }
        );
    }
}

レイアウトファイル