正常ScrollView的滑动方式是,手指上滑数据向下滚动,手指下滑数据向上滚动;
然后现在有个需求,手指的滑动要跟电脑鼠标滚轮一样,上划就向上滚动到顶,下划滚动到底。
测试代码如下:滑动幅度可以修改scale,ll_content就是scrollview的子布局
private int lastX;
private int lastY;
/**
* 测试滚动反向
*/
@SuppressLint("ClickableViewAccessibility")
private void testScorllReverse(){
final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollview_main);
LinearLayout llContent = (LinearLayout) findViewById(R.id.ll_content);
llContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//屏蔽父控件拦截onTouch事件
v.getParent().requestDisallowInterceptTouchEvent(true);
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int dx =(int)event.getRawX() - lastX;
int dy =(int)event.getRawY() - lastY;
if(dy > 0){//手指向下滑动
}else{//手指向上滑动
}
float scale = 0.25f;
scrollView.smoothScrollBy(0, (int) (dy*scale));
break;
default:
break;
}
return true;
}
});
}