フリックイベント機能

More than 3 years have passed since last update.

Androidで使用できるフリック機能の汎用プログラムです。


フリック機能クラスのコード


FlickChack.class

import android.util.Log;

import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public abstract class FlickCheck {

public static final int LEFT_FLICK= 0;
public static final int RIGHT_FLICK = 1;
public static final int UP_FLICK = 2;
public static final int DOWN_FLICK = 3;

private float adjustX = 150.0f;
private float adjustY = 150.0f;
private float touchX;
private float touchY;
private float nowTouchX;
private float nowTouchY;

/**
* frickViewにはフリックを検知させるViewをセット<br/>
* adjustXには左右のフリック距離目安、adjustYには上下のフリック距離目安をセット
* @param frickView
* @param adjustX
* @param adjustY
*/

public FlickCheck(View frickView, float adjustX, float adjustY){

this.adjustX = adjustX;
this.adjustY = adjustY;

frickView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchX = event.getX();
touchY = event.getY();
break;
case MotionEvent.ACTION_UP:
nowTouchX = event.getX();
nowTouchY = event.getY();
check();
v.performClick();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}

});
}

/**
* どの方向にフリックしたかチェック
*/

private void check(){
Log.d("FlickPoint", "startX:" + touchX + " endX:" + nowTouchX
+ " startY:" + touchY + " endY:" + nowTouchY);
// 左フリック
if(touchX > nowTouchX)
{
if(touchX - nowTouchX > adjustX)
{
getFlick(LEFT_FLICK);
return;
}
}
// 右フリック
if(nowTouchX > touchX)
{
if(nowTouchX - touchX > adjustX)
{
getFlick(RIGHT_FLICK);
return;
}
}
// 上フリック
if(touchY > nowTouchY)
{
if(touchY - nowTouchY > adjustY)
{
getFlick(UP_FLICK);
return;
}
}
// 下フリック
if(nowTouchY > touchY)
{
if(nowTouchY - touchY > adjustY)
{
getFlick(DOWN_FLICK);
return;
}
}
}

/**
* 抽象メソッド:フリックを感知した際、方向を表す値をセットする
* @param swipe
*/

public abstract void getFlick(int swipe);

}



使い方

上記クラスを作成したら、使用したいActivityでインスタンス化します。

・第一引数にはフリックイベントを実装するView(例はページ全体を設定)

・第二引数には横フリックを検知する距離(左右のフリック)

・第三引数には縦フリックを検知する距離(上下のフリック)


MainActivity

View flickView = getWindow().getDecorView(); // Activity画面

float adjustX = 150.0f;
float adjustY = 150.0f;

new FlickCheck(flickView, adjustX, adjustY) {

@Override
public void getFlick(int flickData) {
switch (flickData) {
case FlickCheck.LEFT_FLICK:
// 左フリック
break;

case FlickCheck.RIGHT_FLICK:
// 右フリック
break;

case FlickCheck.UP_FLICK:
// 上フリック
break;

case FlickCheck.DOWN_FLICK:
// 下フリック
break;
}
}
};


インスタンス化後、例のように抽出メソッドのgetFlick(int flickData)で分岐処理を行ってください。


注意点

処理は左右のフリックが優先されます。

インスタンス化する際、引数に設定する「adjustX」の距離が短いと、「adjustY」の検知がされない場合があるので適度な距離を設定してください。