热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义控件FlexibleListView,一个简单的改善就能解放用户在浏览时的有效可视面积...

转载请注明出处:王亟亟的大牛之路昨天写了个有点“小黄暴”的Demo,被各种吐槽屌丝。。上一篇的地址:http:blog.csdn.netd

转载请注明出处:王亟亟的大牛之路

昨天写了个有点“小黄暴”的Demo,被各种吐槽屌丝。。上一篇的地址:http://blog.csdn.net/ddwhan0123/article/details/50341987

今天继续写一些简单的自定义控件命名为FlexibleListView。(基础还OK的小伙伴可以不看N2部分)

先上下效果图:

这里写图片描述

动画效果不明显,其实还是有的只不过被GIF软件给吃了,具体的效果只能观众老爷下了自己Run了。

1.为什么要做这么个东西?

先贴一个反面教材:
这里写图片描述

假设这是一部手机,黑色部分为手机的物理按键,上方红色为上面的菜单或者各位Bar,下方红色为各种Tab之类的东西。然后用户实际在当前页面使用的面积是什么?

只有绿色部分(模拟为一个ListView刷微博,刷新闻之类的内容)

但是其实在用户看内容的时候,除了绿色部分是不需要的,至少是在滚页面的时候是不需要的。

So,FlexibleListView就是干这个的!


2.怎么做?

分析:因为我们的逻辑是在用户滚动的时候做隐藏,那么可以用ListView的OnScrollListener来监听他的拖拽行为。(如果是普通的View,也可以OnRouch记录点击的坐标点和行为的坐标点来判断他的行为,实现差不多)

讲到这里,顺便提一下Android ListView的三个监听事件(这边只提三个)。

1.OnItemClickListener
2.OnTouchListener
3.OnScrollListener

1监听器在点击该项目的子项时触发,2监听器在触碰到ListView时触发,3监听器在ListView滚动时触发

那么我们在样例里的 7那个吐司就是 OnItemClickListener

而拖拽的实现就是用的OnScrollListener


3.怎么使用?

像用平时的那一些自定义控件一样,这边也没Id没什么啥的,只是拽上去就OK了,主要的定制化看 N2部分


<RelativeLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"xmlns:tools&#61;"http://schemas.android.com/tools"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"tools:context&#61;"flexiblelistview.pro.wjj.flexiblelistview.MainActivity"><flexiblelistview.pro.wjj.flexiblelistview.flexiblelistviewPro.FlexibleListView
android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent">
flexiblelistview.pro.wjj.flexiblelistview.flexiblelistviewPro.FlexibleListView>
RelativeLayout>

N2–如何私人订制

首先&#xff0c;我们的自定义控件是继承于RelativeLayout 的&#xff0c;并非ListView&#xff0c;所以客官用哪些父类的方法你见仁见智吧&#xff0c;不过你要用其他的父类其实也没什么不行的&#xff0c;看你的需要

public class FlexibleListView extends RelativeLayout implements AbsListView.OnScrollListener ,AdapterView.OnItemClickListener

问题1&#xff1a;如何加载我自己需要的布局&#xff1f;

LayoutInflater inflater &#61; (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);rootView &#61; inflater.inflate(R.layout.flexible_listview, this);

你自己布局的根布局的id就等于这里的rootView &#xff0c;你的布局文件就等于这里的R.layout.flexible_listview

问题2&#xff1a;如何获得空间的对象&#xff1f;

headView &#61; (LinearLayout) rootView.findViewById(R.id.headView);

跟在Activity里findViewById一样只不过是要用rootView来获取而已。

问题3&#xff1a;哪一部分是核心实现&#xff1f;

&#64;Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) {case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:LogUtils.d("--->onScrollStateChanged AbsListView.OnScrollListener.SCROLL_STATE_IDLE");//滚动停止footView.setVisibility(View.VISIBLE);headView.setVisibility(View.VISIBLE);makeHeadInAnim(headView, 1500);makeFootInAnim(footView, 1500);myAdapter.notifyDataSetChanged();break;case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://正在滚动
// LogUtils.d("--->onScrollStateChanged AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL");footView.setVisibility(View.GONE);headView.setVisibility(View.GONE);myAdapter.notifyDataSetChanged();break;case AbsListView.OnScrollListener.SCROLL_STATE_FLING:LogUtils.d("--->onScrollStateChanged AbsListView.OnScrollListener.SCROLL_STATE_FLING");//开始滚动break;}}

根据用户的状态来做不同的处理&#xff0c;来进行动画的开始与布局的隐藏。

源码地址&#xff1a;https://github.com/ddwhan0123/GitFlexibleListView

你的支持是我的动力&#xff0c;感谢点个赞&#xff0c;我会继续努力。谢谢&#xff01;

这里写图片描述




推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • WPF开发心率检测大数据曲线图的高性能实现方法
    本文介绍了在WPF开发中实现心率检测大数据曲线图的高性能方法。作者尝试过使用Canvas和第三方开源库,但性能和功能都不理想。最终作者选择使用DrawingVisual对象,并结合局部显示的方式实现了自己想要的效果。文章详细介绍了实现思路和具体代码,对于不熟悉DrawingVisual的读者可以去微软官网了解更多细节。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
美美2502909961
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有