Android比较常见的滚动视图吸顶效果

如题,直接上效果图,就是这么粗暴


Android比较常见的滚动视图吸顶效果_第1张图片
吸顶效果

原理

这个吸顶效果的原理很简单,就是一个视觉效果


Android比较常见的滚动视图吸顶效果_第2张图片

如图,其实页面上有两个相同布局的标题,吸顶标题默认隐藏,然后监听ScrollView滚动的高度Y,当滚动的高度Y大于内容1的高度,吸顶标题显示,反之,隐藏吸顶标题。这样从视觉效果上看,标题具有吸顶效果。是不是很easy

代码

public class MainActivity extends AppCompatActivity
{

    private ScrollView scrollView;
    private TextView tv_content;//内容1
    private TextView tv_title_top;//吸顶标题

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scrollView = (ScrollView) findViewById(R.id.scrollView);
        tv_content = (TextView) findViewById(R.id.tv_content);
        tv_title_top = (TextView) findViewById(R.id.tv_title_top);

        //scrollview滚动监听
        scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener()
        {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
            {
                //scrolly:scrollview滚动的高度
                //tv_content.getHeight()内容1的高度
                if (scrollY > tv_content.getHeight())
                {
                    tv_title_top.setVisibility(View.VISIBLE);
                } else
                {
                    tv_title_top.setVisibility(View.GONE);
                }
            }
        });
    }
}

这里有个问题,scrollview的setOnScrollChangeListener滚动监听,要求6.0(API23)之后才能用。
解决方法:在6.0以下有onScrollChanged方法,也能监听scrollview滑动,但是这个方法不能直接调用,所以要自定义一个继承scrollview的view,提供一个方法,把onScrollChanged暴露出来。

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

public class MyScrollView extends ScrollView
{
    private ScrollViewListener scrollViewListener = null;

    public interface ScrollViewListener
    {
        void onScrollChanged(MyScrollView scrollView, int l, int t, int oldl, int oldt);
    }

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

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

    //此方法受保护的
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt)
    {
        super.onScrollChanged(l, t, oldl, oldt);
        if (scrollViewListener != null) 
        {  
            scrollViewListener.onScrollChanged(this, l, t, oldl, oldt);  
        }  
    }
}

然后用MyScrollview替换掉原来的scrollview,调用滚动监听方法

        scrollView.setScrollViewListener(new MyScrollView.ScrollViewListener()
        {
            @Override
            public void onScrollChanged(MyScrollView scrollView, int l, int t, int oldl, int oldt)
            {
                //t:scrollview滚动的高度
                //tv_content.getHeight()内容1的高度
                if (t > tv_content.getHeight())
                {
                    tv_title_top.setVisibility(View.VISIBLE);
                } else
                {
                    tv_title_top.setVisibility(View.GONE);
                }
            }
        });

你可能感兴趣的:(Android比较常见的滚动视图吸顶效果)