我是 android Studio 的初学者。我想在 Activity 中实现:滑动捕获和使用一个按钮。为了做到这一点,我使用了一个继承自手势检测器类的类:
public class SwipeGestureDetector extends GestureDetector {
private final static int DELTA_MIN = 50 ;
public SwipeGestureDetector (final FriendActivity context){
super(context, new GestureDetector.SimpleOnGestureListener () {
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
float deltaX = e2.getX()- e1.getX();
if(Math.abs(deltaX) >= DELTA_MIN){
if (deltaX <0){
context.onSwipe(SwipeDirection.RIGHT_TO_LEFT);
return true ;
}
else {
context.onSwipe(SwipeDirection.LEFT_TO_RIGHT);
return true ;
}
}
return false ;
}
} );
}
public static enum SwipeDirection {
LEFT_TO_RIGHT, RIGHT_TO_LEFT
}
}
这里是实现“滑动”和按钮的 Activity 的代码(代码已简化):
public class FriendActivity extends AppCompatActivity {
private Button btnDelete ;
private SwipeGestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend);
btnDelete.setOnClickListener(btnBestListener);
gestureDetector = new SwipeGestureDetector(this);
}
public boolean dispatchTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
private View.OnClickListener btnBestListener = new View.OnClickListener(){
@Override
public void onClick(View v) {
//ACTION WITH THE BUTTON
}
};
public void onSwipe(SwipeGestureDetector.SwipeDirection direction) {
switch (direction) {
case LEFT_TO_RIGHT:
//ACTIONS WHEN I SWIPE FROM THE LEFT TO THE RIGHT
break;
case RIGHT_TO_LEFT:
//ACTIONS WHEN I SWIPE FROM THE RIGHT TO THE LEFT
break;
}
}
}
滑动手势效果很好,但单击按钮无法使用。我认为这是由于 MotionEvent 被 GestureDector“捕获”的事实。我希望我的解释是清楚的。你能帮我解决这个问题吗?如果您有解决方案,您能否以非常简单的方式解释它,因为我从 Android Studio 和 Java 开始。
提前谢谢您!
最佳答案
您错过了findViewById()
。您正在将监听器
设置为空按钮
。
检查下面的代码:
private Button btnDelete ;
private SwipeGestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend);
btnDelete = findViewById(R.id.button);
btnDelete.setOnClickListener(btnBestListener);
gestureDetector = new SwipeGestureDetector(this);
}
关于java - 在同一个 Activity 中组合滑动手势和单击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967197/