片段中的滚动视图同步(滚动速度相同)

时间:2016-02-04 12:45:54

标签: android android-fragments xamarin scrollview

我决定使用固定列(左侧)进行像tablelayout这样的控制..所以我根据RelativeLayout创建了自己的类。该类包含两个scrollView:_scrollViewLeft和_scrollViewRight(每个都包含tableLayout)。一切正常(数据存在,列和行对齐,表格高度相同)但滚动一个scrollView不会滚动另一个。我不知道问题在于控件是否放在ViewPager里面的Fragment中。

这是scrollView类,应该可以同步两个

private class MatrixScrollView : ScrollView
{
        public MatrixScrollView(Context context, IAttributeSet attrs) : base(context, attrs)
        {
        }

        protected override void OnScrollChanged(int l, int t, int oldl, int oldt)
        {
            if (Tag.ToString() == "scrollViewLeft")
                _scrollViewRight.ScrollTo(0, t);
            else
                _scrollViewLeft.ScrollTo(0, t);
        }
    }

只是为了说清楚:如果你在某个方向线上滚动scrollViewLeft     _scrollViewRight.ScrollTo(0,t); 执行 - 但它没有做任何事情_scrollViewRight保持原状。

我的控件基于this

1 个答案:

答案 0 :(得分:0)

可能是ViewPager或生命周期和Tag属性的混淆。所以我传递了连接scrollView的实例 - 它工作。

public class MatrixScrollView : ScrollView 
{
    public MatrixScrollView(Context context, IAttributeSet attrs) : base(context, attrs)
    {
        VerticalScrollBarEnabled = false;
        OverScrollMode = OverScrollMode.Never;
    }

    public void SetConnectedScrollView(MatrixScrollView connectedScrollView)
    {
        _connectedScrollView = connectedScrollView;
    }

    MatrixScrollView _connectedScrollView;


    bool _isTouchScroll = true;

    public void ScrollThisView(int l, int t)
    {
        _isTouchScroll = false;

        ScrollTo(l, t);

        _isTouchScroll = true;
    }

    protected  override void OnScrollChanged(int l, int t, int oldl, int oldt)
    {
        base.OnScrollChanged (l, t, oldl, oldt);

        if(_isTouchScroll)
            _connectedScrollView.ScrollThisView(l, t);
    }
}