我有一个RelativeLayout我正在使用一个TouchListener来使用GestureDetector。我已经完成并且可以检测到双击但是如何在视图中添加滑动事件呢?
private void myTapEvent(){
RlContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
count++;
doTaskHere();
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
}
实施滑动事件后,我该如何切换 a。)仅允许点击并禁用滑动 和 b。)禁用点击并仅允许滑动。
答案 0 :(得分:2)
在GestureDetector
侦听器中,添加onFling
方法。另外,要在它们之间切换,您需要在类中使用boolean
变量进行切换。
private boolean mAllowSwipe = true; // True = swipe, no double-tap; false = double-tap, no swipe
// ...
private void switchGestureMode() {
if (mAllowSwipe)
mAllowSwipe = false;
else
mAllowSwipe = true;
}
// ...
private void myTapEvent(){
// ...
gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
if (mAllowSwipe) {
return false;
}
count++;
doTaskHere();
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (!mAllowSwipe) {
return false;
}
// Your logic here
}
});
}
// ...
答案 1 :(得分:2)
为了检测滑动(它们被称为 FLING EVENTS ),您必须实现android.view.GestureDetector.OnGestureListener接口。该接口提供的方法之一是onFling。这将检测滑动(您必须找到所需滑动事件的确切实现)。
关于点击和滑动之间的切换,您是否要使用某种按钮点击事件来执行此操作?假设您使用两个按钮(忽略语法错误),我可以修改您的代码。即使在你不使用两个按钮的情况下,你仍然只需要修改下面两个布尔值,无论你想要禁用攻丝和滑动(直到你点击两个中的一个,滑动和攻丝都不会开始工作按钮)
boolean makeSwipe = false;
boolean makeTap =false;
//onCreate method{
makeTapButton.setOnClickListener(new android.view.OnClickListener{
@Override
public onClick(View arg0){
makeSwipe = false;
makeTap = true;
}
});
makeSwipeButton.setOnClickListener(new android.view.OnClickListener{
@Override
public onClick(View arg0){
makeSwipe = true;
makeTap = false;
}
});
private void myTapEvent(){
RlContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
if(makeTap)
{
count++;
doTaskHere();
return true;
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if(makeSwipe)
{
// Do some stuff
return true;
}
return false;
}