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,写个接口进行监听回调。
效果图:
具体实现方法如下:
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程序设计有所帮助。