我的活动中有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
答案 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,了解何时触发这些行动。