`

实现类似iPhone的TableView

 
阅读更多

效果如下:

 

工程截图:

 

大致介绍下做法:

1.图片使用的是.9.png,这样图片就不会失真了。

2.拦截ListView的触摸事件,重写onInterceptTouchEvent事件,利用pointToPosition(x,y),获得当前触摸的listView的item的position。根据position和item的数量,设置item的背景,即可。

 

下面直接上代码:

CornerListView.java:

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.AdapterView;
import android.widget.ListView;

/**
 * Corner effect ListView, some like the iPhone TableView 
 * 
 * 圆角矩形的ListView,类似iPhone的TableView
 * 
 * @author MichaelYe
 * @since 2012-8-29
 * 
 */
public class CornerListView extends ListView 
{

	public CornerListView(Context context) 
	{
		super(context);
		init();
	}

	public CornerListView(Context context, AttributeSet attrs) 
	{
		super(context, attrs);
		init();
	}
	
	public CornerListView(Context context, AttributeSet attrs, int defStyle)
	{
		super(context, attrs, defStyle);
		init();
	}

	/**
	 * set the ListView white corner background
	 * 
	 * 设置整体的背景是白色圆角
	 * 
	 * */
	private void init()
	{
		this.setBackgroundResource(R.drawable.corner_list_bg);
	}

	/**
	 * intercept the touch event
	 * 
	 * 拦截触摸事件
	 * 
	 * */
	@Override
	public boolean onInterceptTouchEvent(MotionEvent event)
	{
		switch (event.getAction()) 
		{
		case MotionEvent.ACTION_DOWN:
			int x = (int) event.getX();
			int y = (int) event.getY();
			int itemPosition = pointToPosition(x, y);//Maps a point to a position in the list.
			int itemCount = getAdapter().getCount() - 1;
			if (itemPosition == AdapterView.INVALID_POSITION)
			{
				break;
			}
			else 
			{
				if (itemPosition == 0)//当第一个item被点击的是,需要判断下当前是否只有一条数据
				{
					if (itemPosition == itemCount) 
					{
						//只有一项 only one item
						setSelector(R.drawable.app_list_corner_single_item);
					} 
					else
					{
						//第一项 the first item
						setSelector(R.drawable.app_list_corner_first_item);
					}
				} 
				else if (itemPosition == itemCount)//最后一条数据被点击的时候 the last item
				{
					setSelector(R.drawable.app_list_corner_last_item);
				}
				else 
				{
					setSelector(R.drawable.app_list_corner_middle_item);
				}
			}

			break;
		case MotionEvent.ACTION_UP:
			break;
		}
		return super.onInterceptTouchEvent(event);
	}
}

 

MainActivity.java:

/**
 * This Demo shows how to make a Corner ListView just like the iPhone TableView
 * 
 * 这个demo展示了如何制作一个类似iPhone的TableView控件
 * 
 * @author MichaelYe
 * @since 2012-8-29
 * */
public class MainActivity extends Activity 
{

	CornerListView cornerListView;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        cornerListView = (CornerListView)findViewById(R.id.list);
        cornerListView.setAdapter(new SimpleAdapter(MainActivity.this, getData(), 
        		android.R.layout.simple_list_item_1, new String[]{"KEY"}, new int[]{android.R.id.text1}));
    }

    /**
     * DataSource
     * 
     * 数据源
     * 
     * 
     * */
    public List<HashMap<String, String>> getData()
    {
    	List<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
    	HashMap<String, String> map0 = new HashMap<String, String>();
    	HashMap<String, String> map1 = new HashMap<String, String>();
    	HashMap<String, String> map2 = new HashMap<String, String>();
    	HashMap<String, String> map3 = new HashMap<String, String>();
    	HashMap<String, String> map4 = new HashMap<String, String>();
    	map0.put("KEY", "0");
    	map1.put("KEY", "1");
    	map2.put("KEY", "2");
    	map3.put("KEY", "3");
    	map4.put("KEY", "4");
    	dataList.add(map0);
    	dataList.add(map1);
    	dataList.add(map2);
    	dataList.add(map3);
    	dataList.add(map4);
    	return dataList;
    }
    
}

 布局文件:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

</RelativeLayout>

 

工程下载地址:

https://github.com/michaelye/DemoCornerListView

 

  • 大小: 41.9 KB
  • 大小: 66.2 KB
分享到:
评论

相关推荐

    IOS 类似iphone通讯录TableView的完整demo【附源码】

    本示例是一个“类似iPhone通讯录的TableView完整Demo”,特别适合初学者学习和理解UITableView的用法。下面将详细讲解这个Demo中的关键知识点。 1. UITableView基本结构: UITableView由多个UITableViewCell组成,...

    iphone 网格tableview实例

    "iPhone网格TableView实例"是指在iPhone应用中使用UITableView来创建类似网格的布局,通常指的是每个单元格(cell)拥有相同的宽度和高度,形成整齐的矩阵效果。这种布局方式常见于图片展示、商品目录或者菜单选项等...

    仿造iPhone dTableView 接口开发的Android TableGroupView

    在Android开发中,为了实现类似iOS中的UITableView效果,开发者经常会选择自定义视图来达到目的。本话题将深入探讨如何仿造iPhone中的dTableView接口,创建一个名为TableGroupView的Android组件,以此来实现分组表格...

    iphone开发 Tableview QQ菜单

    本项目“iphone开发 Tableview QQ菜单”旨在创建一个类似QQ应用中的菜单界面,通过UITableView实现用户友好的交互体验。在这个示例中,虽然代码量不多,但已经完成了所有必要的功能。 首先,我们需要理解...

    实现类似iphone系统的长按删除功能

    在iOS开发中,实现类似iPhone系统的长按删除功能,通常涉及到手势识别(Gesture Recognizer)和自定义视图控制器(UIViewController)的交互。这个功能在许多应用中都非常常见,例如邮件应用、日历应用等,它允许...

    IOS通讯录一样的TableView实现

    总之,实现一个类似iPhone通讯录的UITableView,需要综合运用UITableView的布局、数据源、代理方法、索引分组以及页面导航等技术。通过合理的设计和优化,我们可以创建出一个高效、易用的通讯录界面。

    iphone开发实例 TableView 02

    本实例“iphone开发实例 TableView 02”将重点讲解如何通过偏移量(Offset)改变TableView背景,这通常用于实现滚动时背景动态变化的效果,提升用户体验。 首先,我们需要了解UITableView的基本结构。UITableView由...

    iphone下拉刷新TableView

    总结起来,"iPhone下拉刷新TableView"是一个关于如何在iOS应用中实现自定义下拉刷新效果的话题。你可以使用内置的`UIRefreshControl`,也可以创建自定义视图来实现更多定制化功能。无论选择哪种方式,都需要理解`...

    ios tableview

    首先,UITableView是一个用于显示一维数据的视图,可以用来创建类似iPhone联系人应用那样的列表。它由一系列UITableViewCell组成,每个cell代表数据模型中的一个条目。UITableView有两种主要的样式:Plain和Grouped...

    iphone下拉列表实现

    在iOS开发中,实现iPhone的下拉列表通常涉及到UITableView或者UICollectionView控件的使用。这些控件是Apple提供的原生UI组件,能够展示一系列可滚动的数据项,非常适合构建类似下拉菜单的效果。本教程将深入探讨...

    ios-TableView表头.zip

    在给定的“ios-TableView表头.zip”资源中,我们可以推测其内容可能涉及如何实现类似12306应用中的表头滚动效果,特别是针对iPhone 4和4s这类较小屏幕的适配。在这里,我们将深入探讨UITableView的表头...

    EGOTableViewPullRefresh下拉刷新示例

    另外实现了类似iPhone通讯录根据字母快速索引联系人的功能,这里是点击右侧的省份名称,快速定位到其下辖的城市列表。 2.实现了tableView的下拉刷新功能,下拉tableView的过程中,将依次显示“下拉刷新...”、...

    tableview桌面排列.zip

    "tableview桌面排列"这个主题,显然涉及到如何利用UITableView来实现类似iOS设备主屏幕那样的自定义布局。主屏幕的排列方式,通常指的是图标、文件夹和其他小部件在桌面上的组织方式,而这种排列在iOS中是通过...

    iPhone中实现qq下拉效果

    在iOS应用开发中,尤其是针对iPhone设备,实现类似QQ的下拉刷新效果是一个常见的需求,它为用户提供了方便的数据更新方式。这个效果通常被称为“下拉加载更多”或“上拉刷新”,在QQ等社交应用中尤为常见。下面将...

    (0060)-iOS/iPhone/iPAD/iPod源代码-弹出视图(Popup View)-TableView Within Alert

    因此,开发者通常会使用自定义视图或者替代方案来实现类似功能。 这个资源的实现可能包含了以下步骤: 1. **自定义对话框类**:由于原生的UIAlertView不支持嵌入UITableView,所以需要创建一个自定义的弹出视图类...

    Autocompletion TableView(iPhone源代码)

    来源:Licence:BSD平台:iOS设备:iPhone / iPad作者:Gushin Arseniy  实现文字输入的自动填充/自动提示功能。用户在UITextField中输入英文,根据输入的字母出现文字提示,即类似电话本的首字母索引功能。 ...

    iphone通讯录的简单实现

    在iOS开发中,实现iPhone通讯录功能是一项常见的任务,它涉及到UITableView的使用,以及数据的索引、排序和头字母的处理。以下是对这些知识点的详细说明。 首先,`UITableView`是苹果iOS SDK中用于展示列表数据的...

    iphone 绘制uitable

    在iOS开发中,`UITableView` 是一个至关重要的组件,它用于展示列表数据,通常用于创建类似联系人列表、消息列表等界面。`UITableView` 的核心是它的数据源(DataSource)和代理(Delegate),这两个协议定义了如何...

    iPhone之UITableView入门

    在iOS开发中,UITableView是应用最广泛的一种控件,它被用来展示列表或者表格数据,类似于Android中的ListView。本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其...

    iPhone 开发实现 tweetie 的 pull-down-refresh

    标题 "iPhone 开发实现 tweetie 的 pull-down-refresh" 指的是在iOS应用开发中实现一个类似Tweetie应用的下拉刷新功能。Tweetie是一款早期的Twitter客户端,其下拉刷新设计深受用户喜爱,后来这一设计被广泛应用于...

Global site tag (gtag.js) - Google Analytics