效果如下:
工程截图:
大致介绍下做法:
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
分享到:
相关推荐
本示例是一个“类似iPhone通讯录的TableView完整Demo”,特别适合初学者学习和理解UITableView的用法。下面将详细讲解这个Demo中的关键知识点。 1. UITableView基本结构: UITableView由多个UITableViewCell组成,...
"iPhone网格TableView实例"是指在iPhone应用中使用UITableView来创建类似网格的布局,通常指的是每个单元格(cell)拥有相同的宽度和高度,形成整齐的矩阵效果。这种布局方式常见于图片展示、商品目录或者菜单选项等...
在Android开发中,为了实现类似iOS中的UITableView效果,开发者经常会选择自定义视图来达到目的。本话题将深入探讨如何仿造iPhone中的dTableView接口,创建一个名为TableGroupView的Android组件,以此来实现分组表格...
本项目“iphone开发 Tableview QQ菜单”旨在创建一个类似QQ应用中的菜单界面,通过UITableView实现用户友好的交互体验。在这个示例中,虽然代码量不多,但已经完成了所有必要的功能。 首先,我们需要理解...
在iOS开发中,实现类似iPhone系统的长按删除功能,通常涉及到手势识别(Gesture Recognizer)和自定义视图控制器(UIViewController)的交互。这个功能在许多应用中都非常常见,例如邮件应用、日历应用等,它允许...
总之,实现一个类似iPhone通讯录的UITableView,需要综合运用UITableView的布局、数据源、代理方法、索引分组以及页面导航等技术。通过合理的设计和优化,我们可以创建出一个高效、易用的通讯录界面。
本实例“iphone开发实例 TableView 02”将重点讲解如何通过偏移量(Offset)改变TableView背景,这通常用于实现滚动时背景动态变化的效果,提升用户体验。 首先,我们需要了解UITableView的基本结构。UITableView由...
总结起来,"iPhone下拉刷新TableView"是一个关于如何在iOS应用中实现自定义下拉刷新效果的话题。你可以使用内置的`UIRefreshControl`,也可以创建自定义视图来实现更多定制化功能。无论选择哪种方式,都需要理解`...
首先,UITableView是一个用于显示一维数据的视图,可以用来创建类似iPhone联系人应用那样的列表。它由一系列UITableViewCell组成,每个cell代表数据模型中的一个条目。UITableView有两种主要的样式:Plain和Grouped...
在iOS开发中,实现iPhone的下拉列表通常涉及到UITableView或者UICollectionView控件的使用。这些控件是Apple提供的原生UI组件,能够展示一系列可滚动的数据项,非常适合构建类似下拉菜单的效果。本教程将深入探讨...
在给定的“ios-TableView表头.zip”资源中,我们可以推测其内容可能涉及如何实现类似12306应用中的表头滚动效果,特别是针对iPhone 4和4s这类较小屏幕的适配。在这里,我们将深入探讨UITableView的表头...
另外实现了类似iPhone通讯录根据字母快速索引联系人的功能,这里是点击右侧的省份名称,快速定位到其下辖的城市列表。 2.实现了tableView的下拉刷新功能,下拉tableView的过程中,将依次显示“下拉刷新...”、...
"tableview桌面排列"这个主题,显然涉及到如何利用UITableView来实现类似iOS设备主屏幕那样的自定义布局。主屏幕的排列方式,通常指的是图标、文件夹和其他小部件在桌面上的组织方式,而这种排列在iOS中是通过...
在iOS应用开发中,尤其是针对iPhone设备,实现类似QQ的下拉刷新效果是一个常见的需求,它为用户提供了方便的数据更新方式。这个效果通常被称为“下拉加载更多”或“上拉刷新”,在QQ等社交应用中尤为常见。下面将...
因此,开发者通常会使用自定义视图或者替代方案来实现类似功能。 这个资源的实现可能包含了以下步骤: 1. **自定义对话框类**:由于原生的UIAlertView不支持嵌入UITableView,所以需要创建一个自定义的弹出视图类...
来源:Licence:BSD平台:iOS设备:iPhone / iPad作者:Gushin Arseniy 实现文字输入的自动填充/自动提示功能。用户在UITextField中输入英文,根据输入的字母出现文字提示,即类似电话本的首字母索引功能。 ...
在iOS开发中,实现iPhone通讯录功能是一项常见的任务,它涉及到UITableView的使用,以及数据的索引、排序和头字母的处理。以下是对这些知识点的详细说明。 首先,`UITableView`是苹果iOS SDK中用于展示列表数据的...
在iOS开发中,`UITableView` 是一个至关重要的组件,它用于展示列表数据,通常用于创建类似联系人列表、消息列表等界面。`UITableView` 的核心是它的数据源(DataSource)和代理(Delegate),这两个协议定义了如何...
在iOS开发中,UITableView是应用最广泛的一种控件,它被用来展示列表或者表格数据,类似于Android中的ListView。本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其...
标题 "iPhone 开发实现 tweetie 的 pull-down-refresh" 指的是在iOS应用开发中实现一个类似Tweetie应用的下拉刷新功能。Tweetie是一款早期的Twitter客户端,其下拉刷新设计深受用户喜爱,后来这一设计被广泛应用于...