android处理2个ScrollView联动问题 /MyHScrollView extends HorizontalScrollView

  1. /**自己重写一个类,继承SCROLLVIEW,重写ONSCROLLCHANGED方法,把你要控制的VIEW SET进来,然后,在ONSCROLLCHANGED方法中,设置该VIEW的SCROLLTO,ONSCROLLCHANGED方法中有四个参数,第二个是纵坐标"t",设置到scrollTo(0,t)中,这样,就可以实现了. 
  2. 当然别忘了在LAYOUT的XML文件中,对应的SCROLLVIEW,换成自己重写的这个类. 
  3. */  
  4. public class SyncScrollView extends ScrollView{  
  5.   
  6.     private static final String TAG = "SyncScrollView";  
  7.     View mView;  
  8.     public SyncScrollView(Context context) {  
  9.         super(context);  
  10.     }  
  11.       
  12.     public SyncScrollView(Context context, AttributeSet attrs, int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.     }  
  15.   
  16.     public SyncScrollView(Context context, AttributeSet attrs) {  
  17.         super(context, attrs);  
  18.     }  
  19.   
  20.     protected void onScrollChanged(int l, int t, int oldl, int oldt) {  
  21.         super.onScrollChanged(l, t, oldl, oldt);  
  22.         if(mView!=null){  
  23.             mView.scrollTo(l, t);  
  24.         }  
  25.     }  
  26.   
  27.     public void setScrollView(View view){  
  28.         mView = view;  
  29.     }  
  30. }  

 

==========================================================================================================

 

public class MyHScrollView extends HorizontalScrollView
{
ScrollViewObserver mScrollViewObserver = new ScrollViewObserver();

@Override
 protected void onScrollChanged(int l, int t, int oldl, int oldt)
 {
  /*
   * 当滚动条移动后,引发滚动事件。通知给观察者,观察者会传达给其他的。
   */
  if (mScrollViewObserver != null /*&& (l != oldl || t != oldt)*/)
  {
   mScrollViewObserver.NotifyOnScrollChanged(l, t, oldl, oldt);
  }
  super.onScrollChanged(l, t, oldl, oldt);
 }

}
/*
  * 当发生了滚动事件时
  */
 public static interface OnScrollChangedListener
 {
  public void onScrollChanged(int l, int t, int oldl, int oldt);
 }

/*
  * 观察者
  */
 public static class ScrollViewObserver
 {
  List<OnScrollChangedListener> mList;
public ScrollViewObserver()
  {
   super();
   mList = new ArrayList<OnScrollChangedListener>();
  }
public void NotifyOnScrollChanged(int l, int t, int oldl, int oldt)
  {
   if (mList == null || mList.size() == 0)
   {
    return;
   }
   for (int i = 0; i < mList.size(); i++)
   {
    if (mList.get(i) != null)
    {
     mList.get(i).onScrollChanged(l, t, oldl, oldt);
    }
   }
  }
}

class OnScrollChangedListenerImp implements OnScrollChangedListener
  {
   MyHScrollView mScrollViewArg;
   //构造参数一个滚动轴,构造时赋给自己的属性
   public OnScrollChangedListenerImp(MyHScrollView scrollViewar)
   {
    mScrollViewArg = scrollViewar;
   }

   @Override
   public void onScrollChanged(int l, int t, int oldl, int oldt)
   {
    mScrollViewArg.smoothScrollTo(l, t);
   }
  };

 

 

//实例化列头的水平滚动轴并给其订阅数据行的滚动变化。
    MyHScrollView headSrcrollView = (MyHScrollView) mHead.findViewById(R.id.horizontalScrollView1);
    headSrcrollView.AddOnScrollChangedListener(new OnScrollChangedListenerImp(scrollView1));

你可能感兴趣的:(android处理2个ScrollView联动问题 /MyHScrollView extends HorizontalScrollView)