欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现两个ScrollView互相联动的同步滚动效果代码

程序员文章站 2023-11-20 16:34:16
本文实例讲述了android实现两个scrollview互相联动的同步滚动效果代码。分享给大家供大家参考,具体如下: 最近在做一个项目,用到了两个scrollview互相...

本文实例讲述了android实现两个scrollview互相联动的同步滚动效果代码。分享给大家供大家参考,具体如下:

最近在做一个项目,用到了两个scrollview互相联动的效果,简单来说联动效果意思就是滑动其中的一个scrollview另一个scrollview也一同跟着滑动,要做到一起同步滑动。感觉在以后的项目开发中大家可能也会用到,绝对做个demo分享出来,供大家一起学习,以便大家以后好用,觉的不错,有用的可以先收藏起来哦!

其实对于scrollview,android官方并没有提供相关的获得或者设置滑动距离的方法,也没有提供相应的监听方法。但是那要怎么来做呢?不用担心,肯定能做到。既然没有提供监听方法,但是通过查看android源码可知,提供了一个有关x,y距离的方法,如下:

复制代码 代码如下:
protected void onscrollchanged(int x, int y, int oldx, int oldy)

但是呢,该方法是受保护的方法,不能够直接调用,所以我们得重写scrollview,写个接口进行监听回调。

效果图:

Android实现两个ScrollView互相联动的同步滚动效果代码

具体实现方法如下:

1. 重写scrollview

package net.loonggg.scrollviewdemo;
import android.content.context;
import android.util.attributeset;
import android.widget.scrollview;
public class observablescrollview extends scrollview {
private scrollviewlistener scrollviewlistener = null;
public observablescrollview(context context) {
super(context);
}
public observablescrollview(context context, attributeset attrs,
int defstyle) {
super(context, attrs, defstyle);
}
public observablescrollview(context context, attributeset attrs) {
super(context, attrs);
}
public void setonscrollviewlistener(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);
}
}
}

通过上边代码,我们可以看到上面自己写了一个设置监听的方法,如下:

public void setonscrollviewlistener(scrollviewlistener scrollviewlistener) {
this.scrollviewlistener = scrollviewlistener;
}

那么就看第二步吧,定义一个监听接口。

2. 定义监听接口

package net.loonggg.scrollviewdemo;
public interface scrollviewlistener {
void onscrollchanged(observablescrollview scrollview, int x, int y,
int oldx, int oldy);
}

3. 布局文件引用重写的observablescrollview

具体内容不写了,举个引用例子即可,如下:

<net.loonggg.scrollviewdemo.observablescrollview
android:id="@+id/sv1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="#36b797" >
//里面放包裹内容
</net.loonggg.scrollviewdemo.observablescrollview>

4. activity中调用

package net.loonggg.scrollviewdemo;
import android.os.bundle;
import android.view.window;
import android.app.activity;
public class mainactivity extends activity implements scrollviewlistener {
private observablescrollview sv1, sv2;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);
setcontentview(r.layout.activity_main);
sv1 = (observablescrollview) findviewbyid(r.id.sv1);
sv2 = (observablescrollview) findviewbyid(r.id.sv2);
sv1.setonscrollviewlistener(this);
sv2.setonscrollviewlistener(this);
}
@override
public void onscrollchanged(observablescrollview scrollview, int x, int y,
int oldx, int oldy) {
if (scrollview == sv1) {
sv2.scrollto(x, y);
} else if (scrollview == sv2) {
sv1.scrollto(x, y);
}
}
}

到这里就讲完了,应该说的比较明白了吧。

希望本文所述对大家android程序设计有所帮助。