热门标签 | 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;

这里写图片描述




推荐阅读
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • Android 自定义 RecycleView 左滑上下分层示例代码
    为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
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社区 版权所有