GestureDetectorジェスチャーはスライドイベント(onFling,onScroll)をリスニングできません.
左右可能なimageviewをするときは、ImageViewをカスタマイズしてonTouchEventを書き換え、GestureDetectorに渡してジェスチャーを処理し、onDown()メソッドが実行できることを発見しますが、スライドイベントは常に実行されません.
解決策はデフォルトのonDown()メソッドを書き換え、tureに戻ればいいので、イベントを下に伝え続けます.コードは以下の通りです.
ここで主に触れた知識点はandroidの時間配布で、ブログポイントは私が書いた非常に詳細で、心を静めてゆっくり見ることをお勧めします.
解決策はデフォルトのonDown()メソッドを書き換え、tureに戻ればいいので、イベントを下に伝え続けます.コードは以下の通りです.
package cn.sccl.app.iss.familyalbum.album;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
/**
* Created by caobin on 2018/2/8.
*/
public class GestureImageView extends android.support.v7.widget.AppCompatImageView {
private String tag = " ";
private GestureDetector mGestureDetector;
public GestureImageView(Context context) {
this(context, null);
}
public GestureImageView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public GestureImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mGestureDetector = new GestureDetector(context, gestureListener);
//mGestureDetector.setIsLongpressEnabled(false);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
/**
*
*/
GestureDetector.OnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.e(tag, "onFling-" + " ");
// , 。
int mini_width = 120;
int mini_speed = 0;
float distance_right = motionEvent1.getX() - motionEvent.getX();
float distance_left = motionEvent.getX() - motionEvent1.getX();
float distance_down = motionEvent1.getY() - motionEvent.getY();
float distance_up = motionEvent.getY() - motionEvent1.getY();
if (distance_right > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + " ");
} else if (distance_left > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + " ");
} else if (distance_down > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + " ");
} else if (distance_up > mini_width && Math.abs(v) > mini_speed) {
Log.e(tag, "onFling-" + " ");
}
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
System.err.println(" ");
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onDown(MotionEvent motionEvent) {
// , 。
System.err.println(" ");
return true;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
// , ,
System.err.println(" , , ");
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
// 。
System.err.println(" ");
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
// , 。
System.err.println(" , ");
}
};
}
ここで主に触れた知識点はandroidの時間配布で、ブログポイントは私が書いた非常に詳細で、心を静めてゆっくり見ることをお勧めします.