界面上有2个ScrollLayout,分别在左跟右.当我滚动左边的ScrollView,右边的ScrollView也要滚动,要跟左边的保持一致.我用左边的ScrollView.getScrollY()来设置右边ScrollView的坐标,慢慢滚是可以同步,但是快滚就出问题了,也就是我手指离开了屏幕,左边ScrollView还会有点滚动,但是这个时候就没办法更新右边的ScrollView坐标了.请前辈们帮忙给点思路,这只是问题,原本项目不像这样简单.欢迎大家来讨论下,感激不尽.分实在少,请大家见谅.

解决方案 »

  1.   

    是触摸控制的.对,就是楼上说的那种问题.有解决方案吗?项目里的界面上有很多ScrollView.触摸到中间的ScrollView左右滚动的时候上面的ScrollView也跟着一样滚动,必须要保持同步.触摸到中间的ScrollView上面滚动的时候左边的ScrollView也跟着一样滚动,必须要保持同步.所以才出现这么个问题,不知道哪位前辈能帮忙解决啊?
      

  2.   

    这个东西,应该是滚的过快之后,系统反应没有跟上要不然你就重新写onFling()这个方法public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
    // TODO Auto-generated method stub
    // 参数解释:
    // e1:第1个ACTION_DOWN MotionEvent
    // e2:最后一个ACTION_MOVE MotionEvent
    // velocityX:X轴上的移动速度,像素/秒
    // velocityY:Y轴上的移动速度,像素/秒
    你把velocityX 和 velocityY 做下限制么,不超过多少速度,过快之后不响应就完了
    这只是个思路,我还没碰到过这样的问题
      

  3.   

    触摸到中间的ScrollView上下滚动的时候左边的ScrollView也跟着一样滚动,必须要保持同步.
      

  4.   

    ccll_4177 那该怎么计算呢?能给点详细思路吗?
      

  5.   


    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,   
            float velocityY) {   
        // 参数解释:   
        // e1:第1个ACTION_DOWN MotionEvent   
        // e2:最后一个ACTION_MOVE MotionEvent   
        // velocityX:X轴上的移动速度,像素/秒   
        // velocityY:Y轴上的移动速度,像素/秒   
      
        // 触发条件 :   
        // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒   
      
        if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE   
                && Math.abs(velocityX) > FLING_MIN_VELOCITY) {   
            // Fling left   你把上面的条件换了,自己设定个滑动的最小值和最大值,自己试试,合适了为止 
             
        } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE   
                && Math.abs(velocityX) > FLING_MIN_VELOCITY) {   
            // Fling right   
          
        }   
      
        return false;   
    }  
      

  6.   

    有没有更好点的办法,这样太关心细节了.有没有动态的将2个ScrollView的滚动条捆绑在一起,那样就不用去操心他的滚动速度了
      

  7.   

    呃,那个确实没啥想法了,
    不过这个需求有点象 SeekBar 的原理,嗯,或许可以从这个上面有点什么想法
      

  8.   

    另一个思路,你不要单独计算某个的滚动,把事件设置到放置这两个ScrollView的父容器中,父容器中获取了事件,然后两个都一起滚动,不要让一个ScrollView去获取另一个ScrollView的速度,两个一起从一个地方获取速度~~
      

  9.   


    这个我之前也想过,这样就有一个问题ScrollView1,ScrollView2,ScrollView3上下滚动时候 ScrollView1,ScrollView2 一起上下滚 ScrollView3不动左右滚动时候 ScrollView2,ScrollView3 一起左右滚 ScrollView1不动能解决这个问题吗?
      

  10.   

    嗯,刚才试了一下,找到解决办法了.自己重写一个类,继承SCROLLVIEW,重写ONSCROLLCHANGED方法,把你要控制的VIEW SET进来,然后,在ONSCROLLCHANGED方法中,设置该VIEW的SCROLLTO,ONSCROLLCHANGED方法中有四个参数,第二个是纵坐标"t",设置到scrollTo(0,t)中,这样,就可以实现了.
    当然别忘了在LAYOUT的XML文件中,对应的SCROLLVIEW,换成自己重写的这个类.
      

  11.   


    把你要控制的VIEW SET进来? 
    不明白什么意思怎么做?  能不能共享demo?
      

  12.   


    //这个解决了上下和左右同时滚动时的scrollview的两两同步
     /**自己重写一个类,继承SCROLLVIEW,重写ONSCROLLCHANGED方法,把你要控制的VIEW SET进来,然后,在ONSCROLLCHANGED方法中,设置该VIEW的SCROLLTO,ONSCROLLCHANGED方法中有四个参数,第二个是纵坐标"t",设置到scrollTo(0,t)中,这样,就可以实现了.
    当然别忘了在LAYOUT的XML文件中,对应的SCROLLVIEW,换成自己重写的这个类.
    */
    public class SyncScrollView extends ScrollView{    private static final String TAG = "SyncScrollView";
        View mView;
        public SyncScrollView(Context context) {
            super(context);
        }
        
        public SyncScrollView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }    public SyncScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            if(mView!=null){
                mView.scrollTo(l, t);
            }
        }    public void setScrollView(View view){
            mView = view;
        }
    }//这个继承类的内容同上
    public class SyncHorizontalScrollView extends HorizontalScrollView
      

  13.   

    SyncScrollView 快滚的时候还是有问题啊。。