20161206

随布局变化而产生变化的标题栏

如果是scrollView包裹的页面,需要把scrollView和标题栏定义在相对布局中,保证标题栏可以悬浮,listView也是同理。

如果是scrollView需要用到onOverScrolled方法,然而这是一个protected方法,所以要通过自定义scrollView使用接口回调来实现,listView则需要使用的是onScroll方法,它同样是一个protected方法,所以它的解决思路和上面是一样的,知道改怎么调用监听方法了就可以来完成功能的实现,原理其实也很简单。

ScrollView

首先自定义接口

public interface ScrollViewListener {
    void onScrollChanged(int scrollX, int scrollY, boolean clampedX, boolean clampedY);
}

自定义scrollView,实现接口的回调

  1. public class SmartScrollView extends ScrollView {
  2. private ScrollViewListener scrollViewListener = null;
  3. public SmartScrollView (Context context, AttributeSet attrs,
  4. int defStyle) {
  5. super(context, attrs, defStyle);
  6. }
  7. public SmartScrollView (Context context, AttributeSet attrs) {
  8. super(context, attrs);
  9. }
  10. public SmartScrollView (Context context) {
  11. super(context);
  12. }
  13. @Override
  14. protected void onScrollChangedint scrollX, int scrollY, boolean clampedX, boolean clampedY) {
  15. super.onScrollChanged(scrollX, scrollY, clampedX, clampedY);
  16. if(this.scrollViewListener!= null) {
  17. scrollViewListener.onScrollChanged(scrollX, scrollY, clampedX, clampedY);
  18. }
  19. }
  20. public void setScrollViewListener(ScrollViewListener scrollViewListener) {
  21. this.scrollViewListener = scrollViewListener;
  22. }
  23. }

在页面中实现功能

 smartScrollView.setScrollViewListener(new ScrollViewListener() {
            
            @Override
            public void onScrollChanged(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {

      //获取图片的高度,在这个范围内渐变
                if (scrollY >= iv_background.getTop() + iv_background.getMeasuredHeight()) {
                    ll_title.setBackgroundColor(Color.rgb(0,0,0));
                } else if (scrollY>=0) {

      //计算透明度
                    float persent = scrollY * 1f / (iv_background + iv_background.getMeasuredHeight());
                    int alpha = (int) (255 * persent);
                    int color = Color.argb(alpha,0,0,0);
                    ll_title.setBackgroundColor(color);
                }
            }
        });

listView

这个定义接口回调和scrollView类似,就是参数换了而已。

((PullRefreshListView) pl_list).setOnRefreshListener(new OnRefreshListener() {

@Override
            public void onScroll(int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                int[] ints = new int[2];
                mImage.getLocationOnScreen(ints);
                /**
                 * mImage距离屏幕顶部的距离(图片顶部在屏幕最上面,向上滑动为负数,所以取反)
                 * 如果不隐藏状态栏,需要加上状态栏的高度;隐藏状态栏就不用加了;
                 */
                int scrollY = -ints[1] + statusbarHeight;
                int imageHeight = mImage.getHeight();
                if (mImage != null && imageHeight > 0) {
                    // 如果图片没有向上滑动,设置为全透明
                    if (scrollY < 0) {
                        mByWhichView.setBackgroundColor(Color.argb(0,0,0,0));
                    } else {
                        // 图片已经滑动,而且还没有全部滑出屏幕,根据滑出高度的比例设置透明度的比例
                        if (scrollY < imageHeight) {
                            int alpha= (int) (new Float(scrollY) / new Float(imageHeight) * 255);
                            ll_title.setBackgroundColor(Color.argb(alpha,0,0,0));
                        } else {
                            ll_title.setBackgroundColor((Color.rgb(0,0,0));
                        }
                    } 
                }
            }
        });

ok了。

时间: 2024-10-21 12:47:46

20161206的相关文章

【Java每日一题】20161206

package Dec2016; public class Ques1206 { public static void main(String[] args){ doSex(null); } public static void doSex(Sex sex){ switch (sex) { case Boy: System.out.println("男的"); break; case Girl: System.out.println("女的"); break; de

2016-12-06

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>while循环九九乘法表</title> <script type="text/javascript"> var i = 1; var str = '<table width = "800" bord

PHP课程总结20161206

今天的课程,我们在乌班图系统中利用oneinstack工具安装了Apache.php.mysql.万维网服务器.phpmyadmin软件,搭建起了LAMP服务平台.其余时间在虚拟机centos系统中,按照教程说明编译LAMP环境.下面是我对这一天的学习总结. 一.下载安装软件所需要的文件.网上的资源很丰富,我们如何从中下载到我们所需要的文件,这需要经验的积累,不断地去尝试,去发现那些最有可能获取到资源的网站. 二.通过教程安装软件,要学会辩证的看待教程内容,要有自己的思考,根据自己电脑的情况,做

破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇) 转

https://www.ancii.com/database/30842.html 微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换4个字节就可以破解这个限制 首先按照微软的给出的步骤安装和配置 https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-red-hat 到执

windows 日志文件查找符合条件的列并统计

因为要将windows每天登陆失败的次数统计, "wevtutil el  "           //列出日志名称 "wevtutil  gl  日志名称" //获取日志配置信息. 你可以使用短(如 ep /uni)或长(如enum-publishers /unicode)形式的命令和选项名称. 命令.选项和选项值不区分大小写. 变量均使用大写形式. wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE

VMvare克隆复制多个操作系统

目的:完成linux的双机和集群实验 2016-12-06 在网上查找了一些资料现整理如下,以供之后查看和帮助他人. 注意事项: 1.关闭源虚拟机的电源: 操作很简单 选择完整创建 输入源克隆机的用户名和密码就能登陆这个克隆机. 在网上查看了一下别人的克隆操作有的网卡mac地址冲突造成上不成网的,但是我的克隆没有mac地址冲突. 克隆机网卡MAC: 源克隆机mac: 两个都能同时ping同网络地址,网卡名字相同.

linux shell常用命令

for循环 applist=(app1 app2 app3);for app in ${applist[@]};do echo $app;done; 获取IP地址 ifconfig |grep -Po '(?<=addr:).*(?=Bc)' ifconfig|awk -F"[: ]+" '$4~/[0-9].+[^0-9]+/{print $4}/lo/{exit}' ifconfig|sed -nr 's/^[[:space:]]+inet addr:(.*) Bcast.*

Yii项目开发总结

学习Yii很久了,一直做的是小案例,自以为学的还不错.直到最近用Yii开发了一个非常简单的CMS,一路下来,磕磕绊绊,才知自己不足.加上最近正学习着偏架构方面的知识.特此总结一下.小白经验,大神轻拍,欢迎讨论. 本篇文章主要是将一些 MVC 代码组织的技巧,不会涉及详细编码.声明使用的模版是Yii高级模板. 痛苦的开发. 所有的php框架几乎都遵循MVC模式设计,网络各种教程.官方手册,也是一股脑的说着按着MVC组织代码.先说说开发中我的悲惨历史. 大家都知道,在Yii中,一张表对应一个AR,再

Portable Operating System Interface for uni-X

https://kb.iu.edu/d/agjv Short for "Portable Operating System Interface for uni-X", POSIX is a set of standards codified by the IEEE and issued by ANSI and ISO. The goal of POSIX is to ease the task of cross-platform software development by esta