android开发中实现个性化ListView的一些概念和思路
2010-11-16 19:17:37| 分类: Android |字号 订阅
不管做什么技术,起码需要了解做的东西是什么。
感觉listview是android 的各种控件中比较复杂的一个。网上已经有一些教程来说明如何使用listView控件了,其实一开始我就觉得,我在我的程序中仅仅需要一个列表而已,为何在android中实现竟然要如此复杂?最近这些天的探索才发现,这种复杂其实是为了通用性和更高的可定制性而设计的。其实质是简化了逻辑,具有良好的分层设计,让思路变得清晰明了,确实是一种很高明的设计。
1. android中Activity 与View:
一个Activity 是一个android中看到的屏幕,或者说用户当前所操作的“活动”。但是这个“活动”并不能直接在屏幕上做什么事情,Activity只提供一些基础性的工作,比如监听系统事件、设置“View”、启动其他Activity等等。
View可以理解为一个“视图”,即Activity运行以后需要与给用户呈现的画面,Activity运行以后默认并不给用户提供显示的内容,而View提供视图呈现给用户。
2. ViewGroup:
ViewGroup 继承自View,但是ViewGroup是一中特殊的View,它功能是装载和管理一组下层的View和其让他ViewGroup,这样的好处是让View和其他ViewGroup形成一个树状的结构,而且可以为UI增加结构,将各种屏幕元素构成一个实体。
两个类都是在android.view 这个包里面的。所以使用时需引用各自的包。
Activity调用它的 SetContentView()方法的时候就可以指定一个View 对象,也可以指定一个ViewGroup对象,当Activity获得一个View对象的时候,同时也会把以这个View对象为根节点的树全部绘制出来。
android开发中实现个性化ListView的一些概念和思路 - IT小小鸟 - itsmallbird@126的博客
android中的各种ui控件都是直接或间接继承自View类来实现的,做游戏开发时一般也是继承自View 来实现游戏的显示。
3.ListView:
ListView和View的关系是:
? android.view.View
? android.view.ViewGroup
? android.widget.AdapterView<T extends android.widget.Adapter>
? android.widget.AbsListView
? android.widget.ListView
可见ListView的本质是一组View的集合,即ViewGroup,一般使用的时候直接使用android提供的现成的ListView空间就足够了,不过使用使用ListView之前还需要一个适配器(Adapter)。
4. adapter 适配器:
我们认为ListView中的每一个item都有着相同布局和结构,我们没有必要重复编程为每一个item添加数据进去,这样不但可能降低程序的效率,还有可能增加程序的耦合度,把代码变得很复杂难懂,因此android采用了一种adapter 来把简单的数据映射到listview的每一个item里面。
v适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
5. 数据:
数据可以是String,可以是图像,也可以是其他Object。数据一般都是使用HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上,如果没有现成的布局文件,那么就定义一个布局文件。 布局文件里面控件的id和HashMap的键值数据相对应。
如果需要动态更新ListView中某一行的数据,那么只需更新HashMap中的某一个节的数据即可。
一点想法:
当我们需要定制个性化的ListView的时候,android提供的ListView就显得有点局限了,因此需要我们自己继承ViewGroup来实现自己定制化的listView,比如sonyericsson 的android开发blog里面就提出一种全新的3d效果的listview,就是继承自AdapterView的。
要实现这种完全定制化的ListView呢,可能需要做下面这些工作:
1.继承自ViewGroup的自定义View。AdapterView 最适合。
2. 自定义布局文件 或者 重写onLayout()方法,在onLayout里面自定义item的布局。
3.继承Adapter,如果需要在绑定数据之前做一些处理,可以继承一个Adapter,在里面进行处理数据。
4.重写View的系统事件处理方法,比如要实现一些比较炫的效果,什么滑动、物理效果、弹性之类的,必然需要重写系统事件处理的方法,像onKeyUp()、onKeyDown()、onTouchEvent()这些。
5. 重写绘制方法,要实现前面那个3d ListView 势必需要重新绘制graphics ,所以还要取得graphics 下的canvas,这样来实现对图像的矩阵(matrix)变换、旋转等操作。
6. 在像素旋转和变换操作之后,画面可能出现严重的锯齿和走样,这时需要用到Paint 对象的反锯齿( anti-aliasing),或者更直接可靠的方法,读取绘制缓存然后直接绘制位图。
7. 3d变换中还需要将屏幕左边映射为空间中的3d坐标。用到camera等等。
当然方法还有其他的,很多,并不限于这些,我觉得广义上的的List还可以延伸到继承ViewGroup, 因为View的树状结构,我们是否可以定义出每一个item的结构、布局甚至完全不一样的‘List’出来呢。呵呵,我认为这是完全可以的。
暂时就写到这里,示例和代码等我调好了将在下一篇博客里贴出。
参考地址:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.htm
http://blogs.sonyericsson.com/developerworld/2010/05/20/android-tutorial-making-your-own-3d-list-part-1/
分享到:
相关推荐
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...
在Android应用开发中,ListView是一种常用的控件,用于展示大量数据列表。然而,仅使用ListView往往无法满足复杂的界面需求,例如实现多级菜单。在本教程中,我们将深入探讨如何利用ListView嵌套ExpandableListView...
在Android开发中,有时我们需要创建一个可自定义的弹出菜单,这通常通过使用`PopupWindow`类来实现。`PopupWindow`是Android系统提供的一个轻量级窗口,它可以显示在屏幕上的任意位置,用于创建浮动、弹出式的UI组件...
在Android开发中,有时我们需要创建一种特殊的列表,它不仅能够垂直滚动,还能水平滑动,这就是所谓的“横向ListView”。这个概念通常与RecyclerView结合使用,因为RecyclerView是Android API 21及更高版本中推荐的...
在Android开发中,ListView是一种非常常见的组件,常用于展示大量数据列表,如通讯录、应用列表等。本教程将引导你实现一个简单的仿通讯录ListView小例子,通过这个实例,你可以学习到如何在Android中有效地利用...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,能够实现各种自定义布局和交互效果。本教程将深入讲解如何实现一个基本的ListView,并在用户点击列表项时跳转到...
在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在本文中,我们将深入探讨如何在Android Studio中实现ListView的动态增加以及左滑删除功能,这将帮助你构建更加用户友好的应用程序。 首先...
在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。然而,要实现一个树形结构,即节点有层级关系的数据展示,就需要进行一些定制化的工作。本篇文章将详细探讨如何在不继承`ListActivity`而是...
在Android应用开发中,UI设计和用户体验是至关重要的部分,特别是在构建列表视图(ListView)时。本知识点主要探讨如何实现“滑动ListView时标题置顶”和“ListView吸顶效果”,以及如何使安卓系统状态栏透明化。这些...
在Android应用开发中,ListView是一种常用的控件,用于展示大量数据列表。它的可滚动特性使得它在各种场景下都非常实用,比如展示联系人、菜单项等。然而,仅仅使用ListView来展示列表数据并不足够,很多时候我们...
在Android开发中,ListView是一种常见的UI组件,常用于展示大量可滚动的数据列表。时间轴(TimeLine)是一种直观展示事件顺序和时间关系的布局,它通常由一系列的时间节点和连接线组成,每个节点代表一个事件,连接...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,例如新闻、联系人、邮件等。在本教程中,我们将深入探讨如何利用ListView来浏览新闻。ListView的优势在于它可以动态加载数据,...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。当用户滚动到ListView的底部时,自动加载更多数据的功能通常被称为“无限滚动”或“下拉加载更多”。这种功能可以提升用户体验,避免用户手动...
这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询操作。这个Demo通常会结合SQLite数据库来存储和管理数据,因为SQLite是...
在Android开发中,ListView是一种常用的UI组件,用于展示可滚动的列表数据。它允许开发者以高效的方式处理大量数据,同时提供了丰富的自定义选项,比如添加图标来增强视觉效果。本教程将详细介绍如何在Android中实现...
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能。分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在许多应用中,我们可能需要实现更复杂的交互,比如点击列表项的头部(header)来折叠或展开其对应的子项。这个功能可以增强用户体验,使得...
在Android开发中,气泡式ListView是一种常见的UI设计,它以独特的气泡形状展示列表项,通常用于消息通知、评论展示等场景。本教程将深入探讨如何在Android中实现这样的功能。 1. **理解气泡式ListView** 气泡式...
在Activity中,初始化ListView和EditText,设置适配器,并监听EditText的输入。适配器负责数据的加载、排序和过滤,以及与ListView的交互。自定义View则处理字母导航栏的逻辑。 总结来说,实现"Android 仿联系人...