效果图:
https://ucc.alicdn.com/images/user-upload-01/20190123155931804.gif
- 有两个相同吸顶的View
- viewA在ScrollView中
- viewB与ScrollView同级
- 根据ScrollView滑动距离判断同级的viewB 是否显示
- 当滑动的距离大于viewA到顶部的距离,viewB就显示,反之隐藏
xml代码
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.yechaoa.stickscrollview.MyScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_top_view" android:layout_width="match_parent" android:layout_height="200dp" android:background="@color/colorPrimary" android:gravity="center" android:padding="20dp" android:text="内容区" android:textColor="#fff" android:textSize="20sp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:gravity="center" android:padding="20dp" android:text="@string/app_name" android:textColor="#fff" android:textSize="20sp"/> <TextView android:layout_width="match_parent" android:layout_height="800dp" android:background="@color/colorPrimary" android:gravity="center" android:padding="20dp" android:text="内容区" android:textColor="#fff" android:textSize="20sp"/> </LinearLayout> </com.yechaoa.stickscrollview.MyScrollView> <TextView android:id="@+id/tv_stick_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:gravity="center" android:padding="20dp" android:text="@string/app_name" android:textColor="#fff" android:textSize="20sp" android:visibility="gone"/> </RelativeLayout>
java代码
mTopView = findViewById(R.id.tv_top_view); mStickView = findViewById(R.id.tv_stick_view); MyScrollView mScrollView = findViewById(R.id.scrollView); mScrollView.setScrollViewListener(new MyScrollView.ScrollViewListener() { @Override public void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy) { if (y > mTopView.getHeight()) mStickView.setVisibility(View.VISIBLE); else mStickView.setVisibility(View.GONE); } });
带滑动监听的ScrollView
package com.yechaoa.stickscrollview; import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /** * Created by yechao on 2019/1/23. * Describe : 带滑动监听的scrollview */ public class MyScrollView extends ScrollView { public interface ScrollViewListener { void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy); } 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); } } }