带有Scrollviews和导航栏的Viewflipper

时间:2011-09-14 17:58:19

标签: android navigation scrollview viewflipper

我有一个viewflipper,其中包含许多布局。每个布局都有一个scrollview作为根。

在viewflipper下方,我有一个水平滚动视图,其中包含充当导航栏的文本视图。

我原来的问题是,一旦我添加了一个scrollview,fling就停止了工作,但我添加了以下代码:

    @Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
return gestureDetector.onTouchEvent(ev);
} 

滚动现在和fling一起工作。

我现在唯一的问题是HSV导航栏现在有点奇怪。有时当我尝试滑动它以选择新内容时,HSV会弹回原来的位置。其他时候HSV认为我想扔掉并转移到下一个内容。这当然取决于我尝试滚动它的速度。

我希望导航栏独立于翻板。

我正在尝试理解自己修复它的代码,但却没有到达任何地方。

我的onCreate中有以下内容:

gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (gestureDetector.onTouchEvent(event)) {
            return true;
        }
        return false;
    }};

我有MyGestureDetector类:

class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false;
            // right to left swipe
            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                flipper.setInAnimation(flip_in_from_right);
                flipper.setOutAnimation(flip_out_to_left);
                flipper.showNext();

            }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                flipper.setInAnimation(flip_in_from_left);
                flipper.setOutAnimation(flip_out_to_right);
                flipper.showPrevious();

            }
        } catch (Exception e) {
            // nothing
        }

然后覆盖:

    @Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
return gestureDetector.onTouchEvent(ev);
} 

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

您的HSV究竟在哪里?它固定在屏幕的底部吗?如果是这样,这就是我要做的。在你的onFling活动中,检查fling的Y位置并确保它不在你的HSV中。如果是,那么返回false,你应该好好去。