Android-ObservableScrollView(二)

observablescrollview 立即下载
  • Base相关方法

  • FillGap


本篇主要根据官方提供的simple结合源码理解上面相关知识,由于Activity都是根据基类构建出来的,先来了解基类构建以及涉及到的BaseActivity基类内部提供的方法。

BaseActivity提供了ActionBar的高度获取方法根据actionBar的属性actionBarSize,以及获取屏幕content内容视图的高度(get到新技能)

  protected int getActionBarSize() {//在下面提到的header视图布局的TextView会用到actionBarSize属性,个人比较喜欢用View.getMeasuredHeight()
        TypedValue typedValue = new TypedValue();
        int[] textSizeAttr = new int[]{R.attr.actionBarSize};
        int indexOfAttrTextSize = 0;
        TypedArray a = obtainStyledAttributes(typedValue.data, textSizeAttr);
        int actionBarSize = a.getDimensionPixelSize(indexOfAttrTextSize, -1);
        a.recycle();
        return actionBarSize;
    }

  protected int getScreenHeight() {
        return findViewById(android.R.id.content).getHeight();
    }

setDummyData相关方法迭代只是为视图添加适配器,setDummyDataWithHeader方法核心就两点,为动态创建的headerView配置最小高度和Clickable设置

  headerView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, headerHeight));
  // headerView最小高度
  headerView.setMinimumHeight(headerHeight);
  // 这是需要禁用头的列表选择器效果
  headerView.setClickable(true);
  setDummyDataWithHeader(listView, headerView, num);

下面来看一组效果图

FillGap系类的Simple都继承自基类FillGapBaseActivity extends BaseActivity

public abstract class FillGapBaseActivity<S extends Scrollable> extends BaseActivity implements ObservableScrollViewCallbacks {

}

createScrollable在各自Activity实现里面的控件Observable系列自定义控件实现了Scrollable所以各自Activity直接返回即可,这里的scrollable主要用于获取currentScrollY来更新视图。onScrollChanged滑动变化监听回调后根据scrollY调用updateViews更新视图。下面通过一幅图来理解base里面的变量定义

当然上图效果是展示运行后的效果,布局布局界面却是这样的

那这到底是怎么达到效果,一跳转Activity就把header部分view显示到最下面的呢?且看Base里面的onCreate方法,调用了addOnGlobalLayoutListener,在刚进入界面会执行回调,此时scrollY默认是0,执行updateViews方法更新视图,这里FillGap2BaseActivity基于父类重构getHeaderTranslationY方法重新计算出真正的需要transtionY的值作用于header,下面是相关代码

public abstract class FillGap2BaseActivity<S extends Scrollable> extends FillGapBaseActivity<S> {
    protected float getHeaderTranslationY(int scrollY) {
        return ScrollUtils.getFloat(-scrollY + mFlexibleSpaceImageHeight - mHeaderBar.getHeight(), 0, Float.MAX_VALUE);
    }
}

//.......................................

 protected void updateViews(int scrollY, boolean animated) {
        // If it's ListView, onScrollChanged is called before ListView is laid out (onGlobalLayout).
        // This causes weird animation when onRestoreInstanceState occurred,
        // so we check if it's laid out already.
        if (!mReady) {
            return;
        }
        // 图片的transtionY的值按照scrollY的二分之一来计算,如果按照scrollY值来计算就是平推效果
        ViewHelper.setTranslationY(mImage, -scrollY / 2);

        // Translate header 变化header位置,如果是 scrollY=0,就直接吧header放到了上图位置,第一次加载时候animation为false,让人感觉不到transtion效果
        ViewHelper.setTranslationY(mHeader, getHeaderTranslationY(scrollY));

        // Show/hide gap
        final int headerHeight = mHeaderBar.getHeight();

        boolean scrollUp = mPrevScrollY < scrollY;

        if (scrollUp) {//根据滑动方向调整header视图的背景高度
            if (mFlexibleSpaceImageHeight - headerHeight - mActionBarSize <= scrollY) {
                changeHeaderBackgroundHeightAnimated(false, animated);
            }
        } else {
            if (scrollY <= mFlexibleSpaceImageHeight - headerHeight - mActionBarSize) {
                changeHeaderBackgroundHeightAnimated(true, animated);
            }
        }
        mPrevScrollY = scrollY;
    }

进过FillGap2simple相关的阅读后进行了一下实践发现并没有想象那么简单,首先遇到一个问题,调用ViewHelper.setTranstionY后原来位置还有一片空白,具体原因出在clipChildren属性,设置为false,允许子布局超出视图范围

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="@dimen/flexible_space_image_height"
        android:scaleType="centerCrop"
        android:src="@drawable/example" />

   //..............................

其次呢下拉滑动,header和imageView视图的显示问题,这里需要主要ViewHelper.setTranslationY方法的调用边界控制。具体自行参考官方simple


参考资料:
http://www.cnblogs.com/over140/p/3508335.html

Android代码-ObservableScrollView ObservableScrollView 高仿美团APP页面滑动标题栏渐变效果,博客讲解请见:高仿美团APP页面滑动标题栏渐变效果 效果图 用法 直接复制ObservableScrollView类到项目里,然后让Activity去实现ObservableScrollView.OnObservableScrollViewListener接口并实现对应的方法即可(如果布局里嵌套的是带滑动属性的控件如ListView,注意解决滑动冲突),具体用法请参考Demo,注释很全。 立即下载

相关推荐

Android-ObservableScrollView-master

监听滚动视图滚动事件的库,帮助与Toolbar的交互动效处理与Material Design的实现

Android-ObservableScrollView(一)

Base相关方法 FillGap2 FillGap3 FlexibleSpace 本篇主要根据官方提供的simple结合源码理解上面这四块的相关知识,最后在这个基础上进行一个拓展,由于Activity都是根据基类构建出来的,我们先来了解基类构建以及涉及到的BaseActivity基类内部提供的方法。 BaseActivity提供了ActionBar的高度获取方法根据actionBar

AnalyzeSystem的博客 1万+

Android-ObservableScrollView:来自 https

Android-ObservableScrollView 用于观察可滚动视图上的滚动事件的 Android 库。 与 Android 5.0 Lollipop 中引入的 Toolbar 进行交互很容易,并且可能有助于实现 Material Design 应用程序的外观和感觉。 样品 谷歌商店 威克 如果您是 wercker 用户,则可以下载最新的构建工件。 有关详细信息,请参见此处。 使用 Gradle 手动安装 克隆此存储库并使用 Gradle 包装器构建应用程序。 $ git clone https://github.com/ksoichiro/Android-ObservableScrollView.git $ cd Android-ObservableScrollView $ ./gradlew installDevDebug 用法 添加到您的依赖项 AAR

ObservableScrollView实现

自动隐藏布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"

琦琦的博客 6085

ObservableScrollView

本资源对Android-ObservableScrollView进行修改实现header先逐渐减小到一半再整体平移

机器视觉/将HIK海康面阵相机连接Halcon软件

本文简述了如何将海康面阵相机连接到Halcon软件中进行实时取图的过程。

Dahe.qu 4866

【亲测免费】 探索 `ObservableScrollView`:让滚动更智能、更可控

探索 ObservableScrollView:让滚动更智能、更可控 本文将带你深入了解一款名为 ObservableScrollView 的开源项目,它提供了一种在 Android 开发中监听和控制 ScrollView 滚动的新方式。该项目由开发者 Lichenwei-Dev 维护,旨在为 Android 应用程序带来更加灵活的滚动交互体验。 项目简介 是一个 Android 的 View 包...

gitblog_00081的博客 505

Gartner DSG数据安全治理 架构及解读

目录背景:架构图: 解释:英文解释:(自上而下)平衡业务与风险、威胁、合规之间的关系(5个维度之间的平衡)优先处理数据集制定安全策略实施安全工具策略配置同步从上到下,从需求调研开始实施数据安全治理。千万不要跨过数据摸底、治理优先级分析、制定治理整体策略,而直接从技术工具开始对数据安全进行治理。 先明确选择需要治理的对象,优先选择重要数据进行数据安全治理工作。可以通过数据梳理、分类分级等手段,完成数据资产盘点和筛选,在纷杂的数据中理清头绪。

锦慈的技术博客 7216

Android-ObservableScrollView实现ActionBar动态显示隐藏的技术解析

Android-ObservableScrollView实现ActionBar动态显示隐藏的技术解析 前言 在移动应用开发中,优化屏幕空间利用是提升用户体验的重要环节。Android-ObservableScrollView作为一个强大的滚动视图监听库,为开发者提供了精细控制界面元素的能力。本文将深入解析如何利用该库实现ActionBar的动态显示与隐藏效果,这种交互模式常见于阅读类应用,能够在用...

gitblog_00234的博客 514

STM32 HAL库 实现基于SPI模式的SD卡、TF卡FATS文件系统+模拟U盘的应用笔记

很多单片机不带SDIO接口,所以在使用SD卡时必须使用SPI模式进行读写。 想做一个基于SPI的SD卡文件系统读写SD卡上的文件,再配合USB接口做一个模拟U盘。只能利用业余时间慢慢更新,也不知道能不能坚持下去。 我会把从零开始开发一个程序需要经历的过程一一的记录下来。做成一个奶妈级的单片机开发笔记。 一、硬件简介 1.SD卡和MicroSD卡(TF卡)的区别 由下图可以很容易的看出TF卡只是比SD卡少了一个3脚Vss脚,其它的管脚顺序

KyleKuang的博客 8332

DRV8311HRRWR直流无刷(BLDC)电机驱动原理图设计

DRV8311HRRWR集成三个MOSFET 半H桥,用于驱动三相无刷直流电机(BLDC),适用于5V、9V、12V或18V直流电源轨或1S至4S电池供电应用。内部集成三个具有集成电流感测功能的电流感测放大器(CSA),可感测BLDC电机的三相电流,从而实现FOC和电流控制系统设计方案。集成保护特性:VM 欠压锁定 (UVLO)、 电荷泵欠压 (CPUV)、过流保护 (OCP)、热警告和热关断 (OTW/OTSD)、故障条件指示引脚 (nFAULT)支持 1.8V、3.3V 和 5V 逻辑输入。

zhusl6688的博客 1227

ObservableScrollView滑动头部颜色从透明渐变成白色

ObservableScrollView,控制滑动距离来改变头部导航栏渐变颜色,Android上观察滚动的视图,可以监听滚动视图的滚动状态。它可以很简单地与Toolbar进行交互,并且很方便地创建Material Design的app,以下是我项目中所用到的,在此做个笔记,有需要的同学可以参考一下。 效果图如下: 1  xml文件中进行声明 <......Observable

scottma211的博客 1141

[yolov5/yolov8修改]替换yolov5/yolov8中的主干网络为EfficientNetv2

针对yolov5和yolov8的主干网络进行替换。

PLH19990227的博客 4146

Android-ObservableScrollView代码混淆配置指南

在Android应用开发中,代码混淆(ProGuard)是保护应用代码、减小APK体积的重要手段。本文将详细介绍如何为Android-ObservableScrollView库配置代码混淆规则,确保库功能正常运行的同时提供有效的代码保护。 ## 混淆配置基础 Android-ObservableScrollView作为一个提供滚动事件监听功能的库,其核心类和接口需要在混淆过程中得到保留。项目中...

gitblog_00165的博客 1007

Apache Jena SPARQL 查询完全指南:入门与实战案例

本文介绍了使用Apache Jena执行SPARQL查询的完整指南。SPARQL是用于RDF数据的标准查询语言,在知识图谱领域地位相当于SQL。教程从基础开始,涵盖创建模型、加载数据以及执行各种查询类型。特别强调了WHERE子句中的图模式匹配机制,通过Mermaid图直观展示数据图与查询图的匹配过程。文章还对比了变量命名规范(?和$前缀),解释了SPARQL引擎如何通过变量绑定实现数据检索。通过Hello World示例演示了完整查询流程,为开发者提供了SPARQL的实用入门指导。

Lincoln 的专栏 1371

使用 Simulink 实现基于相控阵雷达的波束形成技术

摘要:本文详细介绍了利用MATLAB Simulink和Phased Array System工具箱实现相控阵雷达波束形成的完整流程。主要内容包括:1)创建Simulink模型;2)设计天线阵列参数;3)信号生成模块配置;4)波束形成算法实现;5)结果可视化方法;6)仿真调试与优化;7)代码导出与部署。通过分步指导,读者可以掌握从理论到实践的完整开发流程,包括关键参数设置和算法实现示例。该方案适用于军事、气象等领域的雷达系统开发,并支持后续嵌入式和智能算法集成。

xiaoheshang_123的博客 179

Android-ObservableScrollView 实战:填充 Toolbar 上方空隙(Filling Gap)的三种实现模式

本篇文章基于 Android-ObservableScrollView 官方基础教程中的「Filling gap on top of the Toolbar」一章([docs/basic/filling-gap.md](https://link.gitcode.com/i/1d2b1756a1b9be69e423bff4f9229754)),系统讲解在滚动视图中如何让 Header 区域自动"填满

gitblog_00939的博客 435

微信小程序 - 详细解决map地图上使用自定义图标图片或自定义样式进行markers标记点,手机真机运行时安卓系统、苹果ios系统会出现不显示标记点的问题(大概率安卓正常显示标记点,但苹果就加载失败)

微信小程序,map,地图组件,安卓android,苹果ios,真机调试,marker,标记点,在地图上标记,突然就不显示白屏了没动代码,自定义标记点icon,label动态数字,小程序地图markers标记点显示不出来,微信小程序map组件,地图加载后marker标记点ios设备不显示,android正常显示,添加多个标记点。安卓能正常显示标记点图标,IOS设备不显示标记点图标,map地图白屏不显示标记,图标真机调试不显示,自定义图标,报错,页面白屏,不报错也不显示,无法加载,图片展示不出来,iconPat

✅ 精选推荐文章 5956

Android-ObservableScrollView技术博客写作指南

Android-ObservableScrollView是一个用于监听滚动视图(Scrollable View)滚动事件的Android库,通过它可以轻松实现各种滚动交互效果,如ActionBar的显示/隐藏、Toolbar的动态变化等。该项目支持Android API 9及以上版本,提供了多种可观测滚动事件的视图组件,帮助开发者构建更具视觉吸引力的应用界面。 ### 核心功能 该库的核心价值...

gitblog_00944的博客 651

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Android-ObservableScrollView(一)
下一篇: Android开发之反射与注解
AnalyzeSystem
博客等级 码龄11年 204粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值