Android アプリ開発 「MATRIX」

Androidアプリの開発に役立つサンプル集



画面の「タッチ中」を検出する方法

今回は画面がタッチされている状態を検出する方法です。

ユーザーの画面操作を検出するには「onTouchEvent」メソッドを利用し、この onTouchEvent が受け取る MotionEvent の種類で処理を振り分けます。

 

サンプルコード①(MainActivity.java

MotionEvent の 「ACTION_DOWN(画面にタッチ)」で、メッセージを「タッチ中!」に変更して、「ACTION_UP(タッチが終わった)」で、メッセージを元に戻しています。 

public class MainActivity extends AppCompatActivity {

private TextView textView1;

//最初に実行されるメソッド
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//レイアウトファイルにあるテキストビューを取得して操作可能にする
textView1 = (TextView)findViewById(R.id.textview1);
//テキストビューに任意の文字を設定
textView1.setText("タッチしてません!");
}

//画面の操作を取得するメソッド
@Override
public boolean onTouchEvent(MotionEvent event) {

//イベントの種類によって処理を振り分ける
switch (event.getAction()) {

//画面にタッチした時の処理
case MotionEvent.ACTION_DOWN: {
textView1.setText("タッチ中!");
break;
}
//画面のタッチが終わった時の処理
case MotionEvent.ACTION_UP: {
textView1.setText("タッチしてません!");
break;
}
}

//returnは最後に書かないとエラーになる
return super.onTouchEvent(event);
}
}

 

サンプルコード②(activity_main.xml

レイアウトは画面の上下左右の中央に「textview1」というIDの TextView を配置しているだけです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tanronsan.myapplication.MainActivity">

<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@android:color/holo_red_dark"
android:padding="10dp"
android:text="textview1"
android:textColor="@android:color/background_light" />
</RelativeLayout>

 

<実行結果> 

画面にタッチしていない時は画面中央のTextViewに「タッチしてません!」を表示。

f:id:vw-dsg:20171201082249p:plain

 

タイトルやOSのメッセージ領域を除いた白い領域をタッチすると「タッチ中!」に変わります。

f:id:vw-dsg:20171201082322p:plain

 

画面のタッチを終えるとメッセージが再び「タッチしてません!」に戻ります。

f:id:vw-dsg:20171201082249p:plain

ユーザーの画面操作はクリックの検出とは違って、リスナーを登録する必要がないので実装が簡単ですね。

END