当前位置: 首页 > news >正文

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.   
  4.     public SmartScrollView (Context context, AttributeSet attrs,  
  5.             int defStyle) {  
  6.         super(context, attrs, defStyle);  
  7.     }  
  8.   
  9.     public SmartScrollView (Context context, AttributeSet attrs) {  
  10.         super(context, attrs);  
  11.     }  
  12.   
  13.     public SmartScrollView (Context context) {  
  14.         super(context);  
  15.     }  
  16.       
  17.     @Override  
  18.     protected void onScrollChangedint scrollX, int scrollY, boolean clampedX, boolean clampedY) {  
  19.         super.onScrollChanged(scrollX, scrollY, clampedX, clampedY);  
  20.         if(this.scrollViewListener!= null) {  
  21.             scrollViewListener.onScrollChanged(scrollX, scrollY, clampedX, clampedY);  
  22.         }  
  23.     }  
  24.   
  25.     public void setScrollViewListener(ScrollViewListener scrollViewListener) {
  26.         this.scrollViewListener = scrollViewListener;
  27.     }  
  28.   
  29. }

在页面中实现功能

 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了。

 

转载于:https://www.cnblogs.com/zyd357344/p/6138836.html

相关文章:

  • 【原创】Chrome最新版(53-55)再次爆出BUG!
  • avalon2.2的VM生成过程
  • rdesktop tsclient
  • 金额大小写转换(3)
  • Python 元组
  • mybatis mapper文件sql语句传入hashmap参数
  • 完全重装python和yum
  • angular源码分析:图解angular的启动流程
  • redis持久化方法对比分析
  • 接口和抽象类区别
  • 关于图片填充问题
  • 直播视频
  • SLAM学习
  • 轻松精通数据库管理之道——运维巡检之一(服务器状态及个硬件指标)
  • css3+js实现漂亮时钟
  • 【个人向】《HTTP图解》阅后小结
  • C++类中的特殊成员函数
  • Docker: 容器互访的三种方式
  • idea + plantuml 画流程图
  • iOS 系统授权开发
  • iOS 颜色设置看我就够了
  • Javascript编码规范
  • JavaScript创建对象的四种方式
  • k8s如何管理Pod
  • nfs客户端进程变D,延伸linux的lock
  • overflow: hidden IE7无效
  • Redux系列x:源码分析
  • Vue组件定义
  • 翻译--Thinking in React
  • 高性能JavaScript阅读简记(三)
  • 计算机常识 - 收藏集 - 掘金
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微服务框架lagom
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 一道面试题引发的“血案”
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 白色的风信子
  • 《码出高效》学习笔记与书中错误记录
  • Java总结 - String - 这篇请使劲喷我
  • Spring第一个helloWorld
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ###STL(标准模板库)
  • #LLM入门|Prompt#3.3_存储_Memory
  • (1)(1.13) SiK无线电高级配置(六)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (九十四)函数和二维数组
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法