Android 滚动悬停需求的简单实现_android 控件滑动悬停在指定控件下发-程序员宅基地

Android 滚动悬停需求的简单实现

有一种需求,需要某些按钮或者信息栏,随着界面的滚动,悬停在屏幕上方,即不随着其他信息一起隐藏,对于这种需求,有一个简单的实现,就是设置两个一样的控件,然后判断原来随着滚动的那个控件的上边缘是否被隐藏了,如果是,则在悬浮位置显示第二个控件(又或者只用一个控件,第一个隐藏了自后就把它从滚动的容器中remove出来,然后添加到新的位置去)。

下面来简单展示下实现方法:

首先实现一个监听容器类,ListeningScrollView

public class ListeningScrollView extends ScrollView {
    private OnScrollChangedListener onScrollChangedListener;

    public ListeningScrollView(Context context) {
        super(context);
    }

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

    public ListeningScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public interface OnScrollChangedListener {
        public void onScrollChanged(int x, int y, int oldxX, int oldY);
    }

    /**
     * 
     * @param onScrollChangedListener
     */
    public void setOnScrollListener(OnScrollChangedListener onScrollChangedListener) {
        this.onScrollChangedListener = onScrollChangedListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldX, int oldY) {
        super.onScrollChanged(x, y, oldX, oldY);
        if (onScrollChangedListener != null) {
            onScrollChangedListener.onScrollChanged(x, y, oldX, oldY);
        }
    }
}

这个类为scrollView加了一个OnScrollChangedListener 方便处理滚动变化时的事件

具体使用时就很简单了

final ListeningScrollView vScroll = (ListeningScrollView) findViewById(R.id.scrollview);
vScroll.setOnScrollListener(new OnScrollChangedListener() {
        @Override
        public void onScrollChanged(int x, int y, int oldxX, int oldY) {
        vLayoutFloat.setVisibility(y > vLayout.getTop() ?View.VISIBLE : View.GONE);
    }
});

两个layout功能一样,这里是当vLayout的上边缘,小于scrollview的上边缘,即被隐藏的情况下,悬浮的vLayoutfloat则显示出来,当vLayout滚后回来后,又隐藏它。


文章为原创,转载请注明出处。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/elernino/article/details/42413061

智能推荐

前端基础学习——HTML入门详解_前端零基础入门-001-html介绍-程序员宅基地

文章浏览阅读535次。HTML1.常见浏览器内核浏览器内核,英文叫做:Rendering Engine,中文翻译很多,排版引擎、解释引擎、渲染引擎,现在流行称为浏览器内核。浏览器内核包括两部分,渲染引擎和js引擎。渲染引擎负责读取网页内容,整理讯息,计算网页的显示方式并显示页面。js引擎是解析执行js,获取网页的动态效果。 后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。现在的主流行浏览器:浏览器内核备注IETridentIE、猎豹安全、360极速浏览器、百度浏览器_前端零基础入门-001-html介绍

Gomory-Hu tree (最小割树) 介绍及实现_gomory hu-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏8次。Gomory-Hu tree是一颗代表了所有源目节点对间的最小割的树。求解出Gomory-Hu tree就可以了解两两节点对之间的最大流(最大流最小割定理)。举例:下图左侧为一无向图,右侧为初始Gomory-Hutree(所有点在统一集合中),下面进行Gomory-Hu tree的求解。步骤一:任意选定一个源节点和一个目的节点。在本例中不失一般性选择节点1为源节点(s),5为目的节_gomory hu

DUBBO-POSTMAN(dubbo接口测试,dubbo场景测试,dubbo集成测试)-程序员宅基地

文章浏览阅读9.7k次,点赞2次,收藏17次。DUBBO-POSTMANDUBBO-POSTMAN: 一个用于通过web-ui页面访问dubbo接口的工具,灵感源于postman介绍DUBBO-POSTMAN 是一个通过web页面访问dubbo接口的开源工具,包括零代码创建一个dubbo consumer,保存访问用例,构建场景测试.核心功能如下.通过添加一个api的maven dependency即可创建一个dubbo co..._dubbo-postman

看我如何模拟Cobalt Strike上线欺骗入侵者_cobalt strike监控别人计算机-程序员宅基地

文章浏览阅读1.6k次。前言不知道你有没有遇到过马上线却不能操作的情况,我猜当你网络卡或马写得不好时会出现这个问题但是人为的你可能没遇到过,首先要欺骗你的远控,得分析你的协议,如果你的马根本不是公开的网络又是好的,你刚往人家机器里种马,发现马只能上线不能操作,绝对是马有问题,不能甩锅我人家都不知道你的马的通信原理,流量特征,不可能事先准备好一个程序,让你一发就欺骗你的马本文主要研究CS这个APT很喜欢用的马,当..._cobalt strike监控别人计算机

C的输出*_c语言输出*-程序员宅基地

文章浏览阅读605次,点赞3次,收藏3次。输出以下图案: * * * * * * * * * * * * * * * * * * * * * * * * * = =,,这题真纠结,,或者我想得太纠结了,,, #includevoid main_c语言输出*

MATLAB解决微积分问题_巧解含有积分的微分方程,matlab-程序员宅基地

文章浏览阅读3.6k次。求极限limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值.limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,既变量x趋近于a.limit(f):符号函数f(x)的极限值。没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况.limit(f,x,a,’right’):求符号函数f(x)的极限值。_巧解含有积分的微分方程,matlab

随便推点

go 协程池_go这城池-程序员宅基地

文章浏览阅读1.5k次。package mainimport ( "fmt" "log" "strconv" "sync")//定义任务接口type Runnable interface { run()}//具体任务,实现任务接口type Task struct { name string //任务数据 fun func(string) /..._go这城池

Jquery的map遍历_jq中对map遍历的方法-程序员宅基地

文章浏览阅读5.6w次。前些天记录了java中for循环取map,发现用jquery的each一样可以取map(我称之为js的map,不要较劲),且顺序和map中顺序一致。废话少说,看代码 Js代码 var map = { 地名: ["北京","天津","上海"], 民族: ["汉族","藏族","维吾尔族"] };_jq中对map遍历的方法

DELPHI 常用虚拟键:VK__vk_prior-程序员宅基地

文章浏览阅读6.7k次。 常数名称 十六进制值 十进制值 对应按键VK_LBUTTON 01 1 鼠标的左键VK_RBUTTON 02 2 鼠标的右键VK-CANCEL 03 3 _vk_prior

MyEclipse8.6设置JSP文件默认pageEncoding为UTF-8_myelipse8.6使用utf-8-程序员宅基地

文章浏览阅读1.3k次。这样,我们生成一个新的jsp文件的时候默认pageEncoding就是UTF-8了。祝愿大家编程顺利,万事如意~_myelipse8.6使用utf-8

fpga期末考题库_FPGA期末复习题(答案)知识点+题型.doc-程序员宅基地

文章浏览阅读2.6k次。FPGA期末复习题(答案)知识点题型填空题:?1、?FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。??CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定?;FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。??大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。?基..._fpga南昌航空大学期末补考试卷

TensorFlow with MKL for c++环境搭建_用tensorflow时mkl要下载吗-程序员宅基地

文章浏览阅读3.8k次。踩了不少坑,现将正确方法记录如下:安装bezel  安装方法参考官方文档。   值得注意的是,目前貌似是由于bazel的bug,tensorflow的1.4版本编译需要用bazel 0.5.4~0.8.0,再往上的版本会编译失败,具体参考tensorflow的这个issues。   另外,bazel 0.12也有问题,具体参看这个issues。因此在这里选择bazel 0.11..._用tensorflow时mkl要下载吗

推荐文章

热门文章

相关标签