问题描述:
当第一次进入界面并进行下拉刷新时,下拉或者上滑===》下拉刷新框会根据手指触屏的位置产生一段比较大的位移
原因分析:
Scroll 的 子项中(item中)的相关点击事件的ACTION_DOWN处于消费状态,即scrollView 中的触屏事件action_down不会被触发,造成y轴的初始化距离为0,导致计算过程中产生了距离误差
源码部分:
@Override
public boolean onTouchEvent(MotionEvent ev) {
。。。。。
// 此处因子项的点击事件影响对于oy不会有一个初始的赋值,默认为 0;因为这个 MotionEvent.ACTION_DOWN不会被执行
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
ox = ev.getX();
oy = ev.getY();
// Dispatch touch event to parent view
startNestedScroll(ViewCompat.SCROLL_AXIS_HORIZONTAL | ViewCompat.SCROLL_AXIS_VERTICAL);
}
。。。。。。
return super.onTouchEvent(ev);
}
解决方案:(对于框架影响最小的解决方案)
当检测到scrollView 中的oy(y轴的点击坐标)为初始化状态时,不让它移动,即 oy ==移动点的当前坐标;
源码修改:文件路径->nexus\sdk\src\main\java\com\taobao\weex\ui\view\WXScrollView.java
1. 将WxScrollView 中的 oy 设置为一个不可能出现的值;
private float oy = -8000; // 修改oy 的初始状态值(给一个特殊的数,以判断为初始状态)
2. 在OnTouchEvent 中如果oy没有被初始化,则给其当前的y坐标;
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i("heyn",ev.getAction() + "ev.getY: "+ ev.getY());
if (oy == -8000) {
// 初始化oy的值(因未涉及x轴的相关操作,故咱不会进行相关处理)
oy = ev.getY();
}