我顶部有一个
FrameLayout
和底部的 ViewPager
FrameLayout
有 PagerTabStrips
ViewPager
里面有 ScrollView
。
我想要实现的是,在ViewPager的ScrollView的滚动上,我想将
ViewPager
和FrameLayout
的Y位置平滑地同步平移。
在某些时候,我必须修复 FrameLayout
的位置并停止其进一步滚动到顶部。
下面是我的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/parentRelativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:clickable="true"
android:clipToPadding="false"
android:fitsSystemWindows="true" >
<FrameLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.sticky.pager.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dip"
android:layout_gravity="bottom"
android:layout_marginTop="2dp" />
</FrameLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/header"
android:background="@color/blue" />
</RelativeLayout>
我怎样才能以编程方式实现这一目标:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition) {
float scrollY=getScrollY(view);
mViewPager.setTranslationY(-scrollY);
mHeader.setTranslationY(-scrollY);
//What to write here??? This does not work
您应该更改该视图的顶部和底部,而不是移动它。您可以通过滚动偏移来同步滚动
override fun onScrollChange(v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {
view.bottom = valueBottomTranslate.toInt()
view.top = valueTopTranslate.toInt()
}
您可以使用下面的代码。你应该把frame放在scrollView里面。
bindingView.yourSrollView.setOnScrollListener(object : ScrollViewWithEndFunc.OnScrollListener {
override fun onScrollChanged(scrollView: ScrollViewWithEndFunc?, x: Int, y: Int, oldX: Int, oldY: Int) {
if(scrollView!!.scrollY == 0){
baseView.weatherOnDay.translationY = 0.0f
return
}
bindingView.yourFrameView.translationY = - scrollView!!.scrollY.toFloat()/2
}
})