终于迎来的周末哇,深圳两天的凉雨天终于迎来晴日。早上爬起来异常的累,哎。。每天地铁两小时真是强身健体啊~

今天给大家带来一篇关于Android UI的文章:列表Item抽屉展示效果。单说没意思,不然大家又该说我是标题党了。我来笔墨描述下场景:

例如当我们点击某个Item项时,该Item项会有一个或多个的选择项展开来让我们选择。其实这种需求场景很常见,尤其是在App的设置界面。

ok,先给大家带来几幅图:

德玛西亚~上面三幅图是我从英雄联盟助手App中截取,从截图可以看到,当我们点击游戏资料Item的时候,下面会展开显示关于游戏资料的选择。不过也有另外的展示效果就是点击Item项会弹出窗口展示更多的选择:

两种方式都以非常巧妙的设计来展示更多的内容。关于第二种方式相信大家都知道Android中为我们提供了很多窗口展示方式,例如:Dialog、AlertDialog、PopupWindow、DialogFragment等等。

那么第一种方式该如何实现呢?哈哈,可能很多朋友会说ExpandedListView!对,没错,用ExpandedListView确实可以实现多级菜单的展示效果,但是如果一个界面有多个这样的效果,那么我们就需要写多个ExpandListView + Adapter,太麻烦。并且某天产品说,这种展示太死板,我想让它伴随动画展示,例如渐渐下拉展开。哦买噶~如果使用ExpandedListView时没办法添加展开动画的,没办法,为了和产品搞好地下恋情,我们也只能咬咬牙去想办法,该如何实现呢?ok,今天就和大家分享一种实现方式,好了,废话少说,准备开车~

主要内容我会分为以下几个部分来展开:

(1)实现原理分析

(2)选择实现方式

(3)封装

首先先来看下实现的效果图:

哈哈,是不是很炫酷。当我们点击主Item项时会伴随动画以展开显示。相信大家看到这种效果第一反应就是Android属性动画哇!嗯,我们来分析分析使用Android属性动画实现的方式:

(1)主Item一个布局,子Item项一个布局。

(2)给主Item注册单击事件

(3)创建一个动画工具类,并创建一个位移的动画效果。

(4)在Activity中获取子Item的高度

(5)初始化时隐藏。

(6)点击主Item项时,开启动画,逐渐展开到子Item项总高度。

上面就是使用Android动画来实现的方式,相信大家看了都明白,哈哈,原来这么简单那~

确实,从上面的步骤来看这种效果确实很容易实现。但是如果多个界面都有类似效果,并且一个界面也不只一个Item可以展示,可能有很多。那我们一个一个实现的话,代码不仅多而且变的非常冗余。ok,那么我们就需要解决这个问题,没错,对它进行封装。

先来看看我的封装思路:

(1)既然是一个主Item项和一个或多个子Item项,那我可以分为两个布局来展示:MenuItem和SubMenuItem。

(2)然后我需要将两个布局联系到一起,那么就需要一个容器来存放,没错,自定义布局实现。

(3)为了复用,需要公开一些基本设置,那么就需要自定义属性。

(4)创建动画,实现展示效果。

来看看核心代码:

(1)创建主Item布局和子Item布局,并关联。

/**

* 初始化Menu和Item容器

* @param context

*/

private void addDefaultLayout(Context context) {

View defaultView = LayoutInflater.from(context).inflate(layoutId, this,true);

defaultView.setOnClickListener(this);

content = new LinearLayout(context);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

content.setShowDividers(SHOW_DIVIDER_BEGINNING|SHOW_DIVIDER_MIDDLE);

content.setDividerDrawable(ContextCompat.getDrawable(context,R.drawable.item_divider));

content.setOrientation(VERTICAL);

addView(content,layoutParams);

}

(2) 添加子Item选择项

/**

* 添加Item

* @param views

*/

public void addItemView(Listviews) {

this.itemList= views;

for (int i=0; i < views.size(); i++) {

final int position = i;

content.addView(views.get(i));

views.get(i).setOnClickListener(newOnClickListener() {

@Override

public void onClick(Viewv) {

if(null!= mOnItemClickListener) {

mOnItemClickListener.onItemClick(v,position);

}

}

});

}}

使用方式很简单:

(1)布局文件中:

android:id="@+id/foldlayout1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:layoutId="@layout/layout_menu_data"//菜单布局,自定义

/>

(2)Activity:

// 1.添加两个子Item项

for (int i = 0;i<2;i++) {

views1.add(getLayoutInflater().inflate(R.layout.layout_item,null));

}

foldlayout.addItemView(views1);

//  2.设置Item的单击事件

foldlayout.setOnItemClickListener(new FoldLayout.OnItemClickListener() {

@Override

public void onItemClick(View view, int position) {

Toast.makeText(MainActivity.this, "点击了第"+position+"个", Toast.LENGTH_SHORT).show();

}

});

短短几行代码,就轻松实现了。哈哈,是不是很nice。

ok,今天的内容就到这里了,核心的思路还是Android的动画使用以及如何巧妙的实现这种方式。具体的代码我放到了github,大家可以下载查看,如果觉得可以,还望赏颗星星鼓励一下哈。今天的内容就是这些了,thks~

android抽屉式listview,Android实现列表抽屉展示效果相关推荐

  1. Android实现列表抽屉展示效果

    终于迎来的周末哇,深圳两天的凉雨天终于迎来晴日.早上爬起来异常的累,哎..每天地铁两小时真是强身健体啊~ 今天给大家带来一篇关于Android UI的文章:列表Item抽屉展示效果.单说没意思,不然大 ...

  2. android 仿qq好友动态,Android UI仿QQ好友列表分组悬浮效果

    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeade ...

  3. 九、android的ListView实现数据列表展示

    基于上一篇第八节的数据库操作为基础,对数据库中的内容在android界面上进行列表展示 1.工程结构: 列表显示示意图: 列表显示效果图: 2.界面的列表展示配置文件 item.xml: <?x ...

  4. Android 通过ListView实现联系人列表字母索引

    转载:Android自定义View--实现联系人列表字母索引_Code-Porter的博客-CSDN博客_android 字母索引 学习大神的思路和逻辑,很清晰. 这篇博文也不错:安卓仿手机联系人右侧 ...

  5. android listview 风格,【Android】listview卡片式列表的实现

    首先需要把listview的XML改一下风格,着重注意粗体部分. 特别是 android:clipToPadding="false" 并且要记得,ListView的父控件背景颜色设 ...

  6. android 继承listview,Android listView 继承ListActivity的用法

    Android listView 继承ListActivity的用法 在手机中经常有列表方式.如果Activity中只有唯⼀⼀个List(这也是通常的情况),可以继 承ListActivity来实现. ...

  7. android折叠listview,android – 如何在listview中展开和折叠项目

    我对 android很新.我想实现一个列表视图.它包含一些列表项,当它们被单击时,它们应该展开以显示更多信息.但我无法找到办法做到这一点 这是我的activity_main.xml xmlns:too ...

  8. android 分组 listview,Android实现的ListView分组布局改进示例

    本文实例讲述了android实现的listview分组布局改进方法.分享给大家供大家参考,具体如下: 由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图: 然后是实现该listv ...

  9. Android动态listview,Android列表组件ListView使用详解之动态加载或修改列表数据

    在使用ListView组件来显示列表数据时,有的时候我们需要改变列表中的数据,有以下方法: 1.重新给ListView组件设置适配器 这种方法重新创建了ListView,效率不好. 2.使用适配器中的 ...

  10. android 截图 listview,Android屏幕及view的截图实例详解

    Android屏幕及view的截图实例详解 屏幕可见区域的截图 整个屏幕截图的话可以用View view = getWindow().getDecorView(); public static Bit ...

最新文章

  1. GSM Hacking Part① :使用SDR扫描嗅探GSM网络
  2. Spring AOP里面的几个名词
  3. java 手动线程调度_Java Thread 多线程 操作线程
  4. 【网址收藏】如何设置node.js存储路径:node缓存、数据目录
  5. linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?
  6. 利用python进行数据分析——第11章时间序列
  7. thinkpad x60安装WINDOWS2003SERVER
  8. CPU的平均指令周期 怎么算,如何计算处理器的机器周期
  9. 前端激荡三十年,从无到有,从单一到炫彩,技术从未停止!
  10. 三电极体系电化学传感器
  11. 我应该拿什么来拯救你,我的游戏?
  12. Ubuntu加装4T机械硬盘
  13. 一文看懂POE供电原理
  14. NLI:Natural Language Inference
  15. egret游戏入门之学习资源篇
  16. 淘宝客网站为什么会被腾讯拦截
  17. 蚂蚁金服完成140亿美元巨额融资,超过阿里是天荒夜谈吗?
  18. rba有哪几個主要組成部分_rba主要由哪部分组成
  19. 回溯算法——n皇后问题
  20. 邯郸翱翔闹元宵开学活动

热门文章

  1. 申请高德地图API【流程记录】
  2. 小程序毕业设计 基于java后台微信在线考试小程序毕业设计参考
  3. java数据结构和算法——前缀表达式(即波兰表达式)、中缀表达式及后缀表达式(即逆波兰表达式)介绍
  4. 【PostgresSQL】对汉字按拼音排序
  5. Excel表格限制编辑,什么原因?
  6. python的turtle的画太阳花(简洁和经典)
  7. 刘一男词汇课(从abdomen到enormous):书上有路勤为径,学海无涯“懂“作舟
  8. 2021_IJCAI_Graph Learning based Recommender Systems: A Review—(IJCAI, 2021)
  9. 德保罗大学计算机专业,德保罗大学计算机金融申请要求及专业介绍
  10. 华为服务器自检信息怎么开,服务器开机自检内存