Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android手势-onDown有时才被调用_Android_Gesture Recognition - Fatal编程技术网

Android手势-onDown有时才被调用

Android手势-onDown有时才被调用,android,gesture-recognition,Android,Gesture Recognition,这是我第一次使用Android手势。我正在尝试使用我在这个网站上找到的以下方法调用swipeRight和swipeLeft SwipeTouchListener.java 在我的活动中,我调用以下方法并覆盖onSwipeLeft和onSwipeRight,并在这两个上显示Toast消息 chartFlipper.setOnTouchListener(new SwipeTouchListener(this){ @Override public void onSwipeLeft()

这是我第一次使用Android手势。我正在尝试使用我在这个网站上找到的以下方法调用swipeRight和swipeLeft

SwipeTouchListener.java

在我的活动中,我调用以下方法并覆盖onSwipeLeft和onSwipeRight,并在这两个上显示Toast消息

chartFlipper.setOnTouchListener(new SwipeTouchListener(this){

    @Override
    public void onSwipeLeft() {
        Toast.makeText(DashboardActivity.this, "Swipe Left", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSwipeRight() {
        Toast.makeText(DashboardActivity.this, "Swipe Right", Toast.LENGTH_SHORT).show();
    }
});
但问题是,我只在很少的场合看到祝酒词。我在onDown方法中设置了一个断点,发现它只会被调用几次,比如20次调用一次

编辑:我在ViewFlipper上调用了这个方法

编辑2:我在ViewFlipper中将饼图和条形图显示为两个视图。我刚发现浏览图表并不意味着触碰。有没有办法绕过这个问题?

在你的方法中

 @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        float distanceX = e2.getX() - e1.getX();
        float distanceY = e2.getY() - e1.getY();
        if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
            if (distanceX > 0)
                onSwipeRight();
            else
                onSwipeLeft();
            return true;
        }
        return false;
    }
用户覆盖的距离的和条件应大于“滑动距离”阈值距离,这可能并非在所有情况下都是正确的,而且在许多情况下,滑动速度阈值的和条件可能低于阈值。因此,只有在距离大于阈值的情况下,才会看到结果阈值和速度也大于阈值速度尝试降低这些值,您将更频繁地看到结果

 @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        float distanceX = e2.getX() - e1.getX();
        float distanceY = e2.getY() - e1.getY();
        if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
            if (distanceX > 0)
                onSwipeRight();
            else
                onSwipeLeft();
            return true;
        }
        return false;
    }