「ムーブイベント」を検出する
スマートフォンやタブレットの画面をタッチしたまま指を動かす「ムーブイベント」を検出するには View クラスの「onTouchEvent」メソッドの中で「MotionEvent.ACTION_MOVE」アクションを取得します。
サンプルコード①(MainActivity.java)
詳しい説明はコード内のコメントに記述してあります。
public class MainActivity extends AppCompatActivity {
//アプリを動かすと必ず最初に実行される
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//オリジナルのView(画面)をセット
setContentView(new TouchView(this));
}
//オリジナルのView(画面)
public class TouchView extends View {
//X、Y座標用の変数を準備
private float x_zahyou;
private float y_zahyou;
private String mess;
private final static String def_mess = "ムーブしてください";
public TouchView(Context context) {
super(context);
//変数の初期化
x_zahyou = 0;
y_zahyou = 0;
mess = def_mess;
}
//描画するところ
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//文字の表示スタイルを設定
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(50);
paint.setStrokeWidth(30);
//画面に文字列などを表示する
canvas.drawText(mess,50,100, paint);
canvas.drawText("X座標:" + x_zahyou + " Y座標:" + y_zahyou,50,160, paint);
canvas.drawPoint(x_zahyou, y_zahyou, paint);
}
//画面(View)が操作されると呼び出される
@Override
public boolean onTouchEvent(MotionEvent event) {
//画面(View)が押されたかを判定
if(event.getAction() == MotionEvent.ACTION_MOVE) {
mess = "ムーブ中・・・"; //
x_zahyou = event.getX(); //X座標を変数にセット
y_zahyou = event.getY(); //Y座標を変数にセット
} else if(event.getAction() == MotionEvent.ACTION_UP) {
//メッセージを元に戻す
mess = def_mess;
}
//Viewの更新(onDrawの呼び出し)
invalidate();
return true;
}
}
}
サンプルコード②(activity_main.xml)
今回は、オリジナルの「View」を作って表示しているので、レイアウトXMLファイル「activity_main.xml」は使用していません。
実行結果
アプリを起動すると「ムーブしてください」というメッセージと、現在マーカー「■」がある座標(X:0、Y:0)が表示されます。
画面(スクリーン)内の適当なところをタッチしてそのまま指を移動すると、表示が「ムーブ中・・・」に変わり、X座標とY座標の値が連続で変わります。
画面(スクリーン)から指を離すと、表示が「ムーブしてください」に戻ります。
備考・その他
アプリだけでなくゲームなどにも活用できるのでムーブイベントを検出する方法を知っておくととても便利ですね。
END