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」の検知がされない場合があるので適度な距離を設定してください。