我正在应用中实现滚动面板,用户从顶部滚动隐藏的容器,就像Android的状态栏通知面板一样。当我从上到下滚动时,它工作正常,但是当我从下往上滚动时MotionEvent e2
给出随机值。这就是我所做的:
我的触控听众:
upSlide.setOnTouchListener(bottomTouchListener);
GestureDetector:
GestureDetector bottomGestureDetector = new GestureDetector(
context, new BottomTouchGestureListener());
//touch listener
OnTouchListener bottomTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
animateView(sliderView.getTop(), -screenHeight);
return true;
}
return bottomGestureDetector.onTouchEvent(motionEvent);
}
};
GestureDetector:
class BottomTouchGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (e2.getAction() == MotionEvent.ACTION_MOVE) {
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
//left right swipe
} else {
//top down swipe
slideOffset = Math.abs((int) diffY);
Log.e(TAG, "onScroll -->" + e2.getY() + "");
invalidate();
}
} catch (Exception exception) {
}
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
}
我的日志输出是:
onScroll --> 40.83081
onScroll --> 1855.7668
onScroll --> 71.79602
onScroll --> 1843.0444
onScroll --> 50.157593
onScroll --> 1815.4504
onScroll --> 45.553223
onScroll --> 1778.2007
onScroll --> 48.40674
onScroll --> 1751.7765
onScroll --> 44.186157
onScroll --> 1715.3464
onScroll --> 44.40625
onScroll --> 1677.5885
onScroll --> 35.96411
onScroll --> 1624.1068
onScroll --> 22.843506
onScroll --> 1544.1412
onScroll --> 12.907837
onScroll --> 1441.6538
onScroll --> -5.8792725
onScroll --> 1300.1215
onScroll --> -36.662354
onScroll --> 1085.7295
onScroll --> -61.72827
onScroll --> 818.67615
onScroll --> -69.63501
onScroll --> 544.83466
如果您注意到触摸事件MotionEvent e2
的值在滚动上波动,那么我的视图也会闪烁。我不明白这种行为。有人可以解释为什么motionEvent e2
是随机和解决方案???
当我从上到下滚动时它正在工作,但是当我从下到上滚动时,它不工作。
答案 0 :(得分:0)
这是因为当您隐藏状态栏(或垂直结构中的任何其他视图)时,垂直滚动坐标会受到影响。
如果您查看onScroll
文档,它会说distanceY
是从现在到上次调用onScroll
的时间差。根据您的情况,上次调用onScroll
是在状态栏消失之前。
因此,行为不是您建议的“随机”,而是连续的切换。