android listview 滚动不流畅,android – 水平RecyclerView里面ListView不滚动非常流畅

我有一个ListView,每个项目都是一个Horizo​​ntal RecyclerView.我面临的问题是,水平滚动不是很顺利.如果我以完全水平的方向滚动/滑动,那么它的效果很好,但是如果滚动条稍微非水平(例如与水平方向成10度角),则将其视为上/下滚动而不是左/右,由于父级ListView.我试过这个方法:

recyclerView.setOnTouchListener(new FlingRecyclerView.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN:

// Disallow ScrollView to intercept touch events.

v.getParent().requestDisallowInterceptTouchEvent(true);

Log.i("Scroll down", "Intercept true");

break;

case MotionEvent.ACTION_UP:

// Allow ScrollView to intercept touch events.

v.getParent().requestDisallowInterceptTouchEvent(false);

break;

case MotionEvent.ACTION_MOVE:

// Allow ScrollView to intercept touch events.

v.getParent().requestDisallowInterceptTouchEvent(true);

break;

}

// Handle HorizontalScrollView touch events.

v.onTouchEvent(event);

return true;

}

});

但这不是很有效.其实我看不出很大的改善.这是因为这个motionEvent只有在运动完全水平时才被调用 – 这种情况已经很好了.然后我试着这样做:

class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

try {

Log.i("TAG", "VelocityX " + Float.toString(velocityX) + "VelocityY " + Float.toString(velocityY));

Log.i("TAG", "e1X " + Float.toString(e1.getX()) + "e1Y " + Float.toString(e1.getY()) + "e2X " + Float.toString(e2.getX()) + "e2Y " + Float.toString(e2.getY()));

// downward swipe

if (e2.getY() - e1.getY() > SWIPE_MAX_OFF_PATH && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {

Toast.makeText(TestActivity.this, "Downward Swipe", Toast.LENGTH_SHORT).show();

Log.i("TAG", "Downward swipe");

}

else if (e1.getY() - e2.getY() > SWIPE_MAX_OFF_PATH && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {

Toast.makeText(TestActivity.this, "Upward Swipe", Toast.LENGTH_SHORT).show();

Log.i("TAG", "Upward swipe");

}

// right to left swipe

else if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

Toast.makeText(TestActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();

Log.i("TAG", "Left swipe");

} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

Toast.makeText(TestActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();

Log.i("TAG", "Right swipe");

}

} catch (Exception e) {

// nothing

}

return false;

}

}

而且我注意到,只有当我释放手指时才注册这个事件,而不是当我开始刷卡时.一触摸RecyclerView就不行.而且这也没有产生任何明显的改善.我也注意到这些方法在某种程度上也依赖于压力.当我轻轻一击时,没有任何事情发生.同样的道路上做同样的事情,压力更大,会产生滚动.

即使滑动的路径不是水平直线还是运动是圆形的,有没有办法使滚动光滑?任何帮助将高度赞赏.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值