scrollView向下滚动时隐藏视图

时间:2014-09-24 16:41:55

标签: android view android-scrollview

我的活动中有linearLayout和scrollView。我想下一步:当我向下滚动时 - 隐藏linearLayout,当我向上滚动时 - 显示它。 我已经阅读了This article,我试图说谎,但是当我把手指放在屏幕上时,onScrollChanged一直打电话,这是我认为不好的解决方案。

然后我尝试下一步:

public class CustomScrollView extends ScrollView {

Context context;
public void setContext(Context c) {
    this.context = c;
}

public CustomScrollView(Context context) {
    super(context);
}

public CustomScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()){

        case MotionEvent.ACTION_DOWN:
            Log.d("myLogs", "Down ");
            hidePanel();
            break;
        case MotionEvent.ACTION_UP:
            Log.d("myLogs", "Up ");
            showPanel();
            break;

    }
    return super.onTouchEvent(ev);
}
}

但是当我向上滚动时,这种困境并不正确,我得到了Up Up Down等。

我很高兴有任何想法如何制作这个

编辑: 我试试:

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_MOVE:
            final int threashold = 70;
            if (mLastY - ev.getY() > threashold) {
                Log.v("teste", "moving up");
                mLastY = ev.getY();
            } else if (mLastY - ev.getY() < -threashold) {
                Log.v("teste", "moving down");
                mLastY = ev.getY();
            }
    }
    return super.onTouchEvent(ev);
}

当我向上滚动时,我得到了:

09-24 20:22:04.568      497-497/khuta.freeturn V/teste﹕ moving down
09-24 20:22:04.668      497-497/khuta.freeturn V/teste﹕ moving up
09-24 20:22:04.688      497-497/khuta.freeturn V/teste﹕ moving up

当我向下滚动时,我得到了:

09-24 20:24:44.559      497-497/khuta.freeturn V/teste﹕ moving up
09-24 20:24:44.719      497-497/khuta.freeturn V/teste﹕ moving down
09-24 20:24:44.809      497-497/khuta.freeturn V/teste﹕ moving down

2 个答案:

答案 0 :(得分:2)

使用if做你想做的任何动作。

switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
    mLastY = event.getY();
    break;
case MotionEvent.ACTION_MOVE:
    final int threashold = 50;
    if(mLastY-motionEvent.getY()>threashold)
    {
        Log.v("teste","moving up");
        mLastY = motionEvent.getY();
    }else if(mLastY-motionEvent.getY()<-threashold){
        Log.v("teste","moving down");
        mLastY = motionEvent.getY();
    }
}

答案 1 :(得分:1)

MotionEvent.ACTION_DOWN

并不意味着视图向下滚动。它是如何工作的,当你首先在屏幕上触摸手指然后触发MotionEvent.ACTION_DOWN,当你删除它时,调用MotionEvent.ACTION_UP。所以你需要做的是,当你开始触摸屏幕时开始跟踪,并在你移开手指时使用这些信息。

看看HERE,了解何时触发这些行动。