水平联滚动怎么实现?

Android 码拜 10年前 (2015-05-11) 1196次浏览 0个评论

我想实现一个功能上面一个布局是ScrollView里面嵌套一个HorizontalScrollView实现水平滚动  在这个布局下面也有一个ScrollView里面嵌套一个HorizontalScrollView的布局 实现上下左右滚动 我现在想实现的是 当上面的布局水平滚动的时候 下面的也跟着水平滚动 或者 下面的水平滚动 上面的也跟着水平滚动 就是实现联动的效果 请问怎么实现 

水平联滚动怎么实现?

package com.car;

import android.app.Activity;
import android.os.Bundle;

/**
 * 仿写汽车之家首页效果
 */
public class MainActivity extends Activity implements ScrollViewListener, HorizontalScrollViewListener {

    private MyScrollView scrollView1 = null;

    private MyScrollView scrollView2 = null;
    private MyScrollView scrollView3 = null;
    private MyHorizontalScrollView horizontalScrollView1 = null;
    private MyHorizontalScrollView horizontalScrollView2 = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        scrollView1 = (MyScrollView) findViewById(R.id.scrollview1);

        scrollView1.setScrollViewListener(this);

        scrollView2 = (MyScrollView) findViewById(R.id.scrollview2);
        scrollView3 = (MyScrollView) findViewById(R.id.scrollview3);

        horizontalScrollView1 = (MyHorizontalScrollView) findViewById(R.id.MyHorizontalScrollView1);
        horizontalScrollView2 = (MyHorizontalScrollView) findViewById(R.id.MyHorizontalScrollView2);

        scrollView2.setScrollViewListener(this);

    }

    @Override
    public void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy) {
        if (scrollView == scrollView1) {
            scrollView2.scrollTo(x, y);
        } else if (scrollView == scrollView2) {
            scrollView1.scrollTo(x, y);
            scrollView3.scrollTo(x,y);
        }
    }

    @Override
    public void onScrollChanged(MyHorizontalScrollView scrollView, int x, int y, int oldx, int oldy) {
        if(scrollView == horizontalScrollView1){
            horizontalScrollView2.scrollTo(x,y);
        }else if(scrollView == horizontalScrollView2){
            horizontalScrollView1.scrollTo(x,y);
        }
    }
}

现竖直滚动可以联动   但是水平的不能

package com.car;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

/**
 * MyScrollView
 *
 * @Description:
 * @Author: pengqiang.zou
 * @CreateDate: 2015-05-06 15:34
 */
public class MyScrollView extends ScrollView {
    private ScrollViewListener scrollViewListener = null;

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }
}

package com.car;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;

/**
 * MyHorizontalScrollView
 *
 * @Description:
 * @Author: pengqiang.zou
 * @CreateDate: 2015-05-06 16:02
 */
public class MyHorizontalScrollView extends HorizontalScrollView {
    private HorizontalScrollViewListener scrollViewListener = null;

    public MyHorizontalScrollView(Context context) {
        super(context);
    }

    public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setScrollViewListener(HorizontalScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }
}

package com.car;

/**
 * ScrollViewListener
 *
 * @Description:
 * @Author: pengqiang.zou
 * @CreateDate: 2015-05-06 15:35
 */
public interface ScrollViewListener {
    void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy);
}

20分
把所有的HorizontalScrollView加入到一个集合里面,然后监控手势滑动的参数,然后让集合里面的HorizontalScrollView跟着一起滚动。可以看下控件的scrollBy(),scrollTo()这些方法。 
20分
如果你是平行滑动的话,为什么不把两个横向的布局放到一个scroll里呢?如果不是平行滑动,就根据你自己的要求计算滑动尺度
  horizontalScrollView1 = (MyHorizontalScrollView) findViewById(R.id.MyHorizontalScrollView1);
        horizontalScrollView2 = (MyHorizontalScrollView) findViewById(R.id.MyHorizontalScrollView2);
        horizontalScrollView1.setScrollView(horizontalScrollView2);
        horizontalScrollView2.setScrollView(horizontalScrollView1);
上面的代码可以实现2个horizontalScrollView联动

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明水平联滚动怎么实现?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!