[英]Combination of swipe gesture and click button in a same Activity
我是android Studio的初学者。 我想在一个Activity中实现:滑动捕获和使用一个按钮。 为了做到这一点,我使用了一个继承自Gesture Detector类的类:
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
}
}
这里的活动代码实现了“滑动”和按钮(简化了代码):
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()
。 您正在将listener
器设置为null button
。
检查以下代码:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.