android 标题栏一闪,Scrollview滑到顶部时,顶部控件/标题栏一直在顶部悬浮显示

上滑ScrollView,实现标题滑动到顶部时一直悬浮在顶部

不论怎么滑动屏幕内容,当标题部分到达顶部时,便会一直会显示在顶部。

实现原理:

1. 顶部1,顶部2布局需要完全一样,初始化时顶部1不显示,为gone。

2.  当顶部2向上滑动到屏幕顶端时,设置顶部1可见,由于顶部1不包含在ScrollVIew里面,所以会一直存在,不会被滑动;

而向下滑时,当顶部2到达屏幕顶端,隐藏顶部1,显示顶部2即可。

所以实现关键步骤是:

判断顶部2是否滑动到了顶部,也就是标题栏之下。

先看布局,很简单:

布局和原理里面一致:顶部1,ScrollView 就没了。

只是有一个自定义的ScrollView,这个是重点,在代码里面讲,布局也没什么。

记得顶部1不在ScrollView里面,二顶部2在ScrollView里面哦~

接下来就看自定义的ScrollView:

这里面关键的就是onScrollChanged这个方法,实现了ScrollView滑动距离的监听。

public classMyScrollViewextendsScrollView{

private staticStopCallstopCall;//ScrollView向上滑动到顶部的距离private intupH;publicMyScrollView(Contextcontext) {

super(context);}

publicMyScrollView(Contextcontext,AttributeSetattrs) {

super(context,attrs);//赋值:200很重要,这个值是顶部2上面的高度upH= dpTopx(200);//单位是dp}

publicMyScrollView(Contextcontext,AttributeSetattrs,intdefStyleAttr) {

super(context,attrs,defStyleAttr);}

public static voidsetCallback(StopCallc) {

stopCall= c;}

/***关键部分在这里,测量当前ScrollView滑动的距离*

*其中t就是,单位是px,不是dp*

* stopCall是一个接口,是为了在Activity中实现设置顶部1/2可不可见*/@Overrideprotected voidonScrollChanged(intl,intt,intoldl,intoldt) {

super.onScrollChanged(l,t,oldl,oldt);if(t > upH) {//如果向上滑动距离>本例中图片高度stopCall.stopSlide(true);//设置顶部1可见,顶部2不可见} else{//否则stopCall.stopSlide(false);//设置顶部1不可见,顶部2可见}

}

/*** F:将dp转成为px*/private intdpTopx(intdpValue) {

final floatscale= this.getResources().getDisplayMetrics().density;return(int) (dpValue * scale+ 0.5f);}

public interfaceStopCall{

voidstopSlide(booleanisStop);}

}

在activity中

public classMainActivity extendsAppCompatActivity implementsMyScrollView.StopCall{@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myscroview.setCallback(this);//设置myscrollview滑动的监听}

@Overridepublic voidstopSlide(booleanisStop) {

//根据滑动距离显示或隐藏顶部1,顶部2if(isStop) {

rl2.setVisibility(View.INVISIBLE);rl1.setVisibility(View.VISIBLE);} else{

rl1.setVisibility(View.INVISIBLE);rl2.setVisibility(View.VISIBLE);}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值