android上滑搜索栏放大吸顶,Android 在ScrollView中的导航栏悬浮吸顶方法实现

本文详细解析了如何实现ScrollView滚动时导航栏的悬浮与固定效果。通过监听ScrollView的滑动变化,动态调整导航栏的位置,当导航栏距离屏幕顶部小于等于标题栏高度时悬浮,反之则恢复原位置。主要涉及布局设计和Java代码实现,包括自定义ScrollView监听滑动事件以及添加和移除导航栏的操作。
摘要由CSDN通过智能技术生成

效果图:

674f7ebb72bee819fe82b26fcb445d8e.png

效果分析:

往上滑动scrollview当

导航栏距屏幕顶部的距离小于等于标题栏的高度时 悬浮,即上滑到紧贴标题栏时 悬浮。

反之:

(导航栏原来的位置)下滑到距离大于标题栏的高度时将悬浮的导航栏放回原来的位置。

实现步骤:

1、首先是布局实现,在内容布局(标题下面的容器)中,最外层使用FrameLayout包裹住ScrollView(自定义ScrollView,写一个接口监听它的onScrollChanged方法)控件和一个空的LinearLayout控件(用于动态将ScrollView控件中的导航栏添加到里面)。

xml布局,大致酱紫,不重要的view都已省略,重点看注释,看注释,看注释:

2、然后是java代码

主要代码,重点还是看注释:

//scrollview的滑动监听

@Override

public void onScrollChanged(MyScrollView ceshimy, int scrollX, int scrollY, int oldl, int oldt) {

int[] location = new int[2];

lineAddNavigationFixation.getLocationOnScreen(location);

//lineAddNavigationFixation是包裹导航栏的LinearLayout

int y = location[1];//导航栏距屏幕顶部的距离,会随着scrollview的滑动而改变

if (y <= titleView.getHeight()) {//导航栏距屏幕顶部的距离小于等于标题栏的高度时 悬浮,即上滑到紧贴标题栏时 悬浮

addNavigationSuspension();

} else {//反之下滑到距离大于标题栏的高度时放回原来的位置

addNavigationFixation();

}

}

private void addNavigationSuspension() {//添加悬浮

//lineAddNavigationSuspension是布局中的占位LinearLayout

if (lineAddNavigationSuspension.getChildCount() == 0) {

if (navigationDevice.getParent() != null)

((ViewGroup) navigationDevice.getParent()).removeView(navigationDevice);

lineAddNavigationSuspension.addView(navigationDevice);

}

}

private void addNavigationFixation() {//悬浮固定到原位置

if (lineAddNavigationFixation.getChildCount() == 0) {

// L.e("---" + "固定");

if (navigationDevice.getParent() != null)

((ViewGroup) navigationDevice.getParent()).removeView(navigationDevice);

lineAddNavigationFixation.addView(navigationDevice);

}

}

ok,逻辑代码这么点,是不是so简单。

实现原理:

简单概括就是:

布局中,固定一个位置紧靠着标题栏的Linearlayout空控件,和在导航栏控件的外层包裹一个固定高度的Linearlayout控件。监听scrollview的滑动位置,做出相应操作动态将导航栏控件添加到某一个Linearlayout控件中。

结束。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值