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

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


吸顶效果

原理

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



如图,其实页面上有两个相同布局的标题,吸顶标题默认隐藏,然后监听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);
                }
            }
        });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,407评论 4 61
  • 网络现在发展迅速,供应了宝宝们各种各样的需求。而网络用语更是层出不穷,让你稍不留神就out。 ...
    Water纸鸢阅读 3,996评论 0 0
  • 一个人的命运决定于晚上8点到10点之间! /fendou诠释梦想 2013-5-2 17:28 哈佛有一个...
    婚恋师日暖烟轻阅读 1,765评论 0 0
  • 本周是中国人最看中的新春佳节,这周的主题是吃吃喝喝,逛吃逛吃,陪伴家人,热热闹闹的过春节。 带着女儿踏上回家的列车...
    爱笑526阅读 1,256评论 0 0
  • 由河正宇、车太贤、朱智勋三人超强阵容主要的电影《与神同行》,在韩国上映16天就突破了千万观影人次,并一跃成为韩国影...
    想要吃肉的唐僧阅读 4,320评论 0 0

友情链接更多精彩内容