有些东西看多了,就厌烦了:extjs对我这种感觉最为强烈。甚至,有时觉得设计之殇是审美疲劳。
直角看多了,就想看看圆角,不知何时,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,iphone中几乎随处可见圆角设计,也开始出现很多圆角名片了...
今天我们就实现一个圆角的ListView效果。
圆角的设计,我们并不追求到处都用,无处不用,android中有少数界面用直角确实容易显得锋利,和周边界面太过对比而显得不协调,比如大栏目列表,设置等等,而采用圆角实现,则会活泼,轻松的多,也融合的特别好。
1.感觉
实际上在Android中因为SDK中没有默认对圆角的一个完整的支持,需要麻烦自定义设置才能实现完美的圆角效果,所以绝大多数应用都是采用分组直角列表这种样式。
所以我觉得很有必要让大家看看这些少数的不一样的东西,看看有什么不一样的感觉。
先让我们来看两张图片:
左边的是Android的一个应用的设置界面,右边是iphone系统的设置界面。
ps:上述只是效果,并不是说左边的圆角列表就是用listview是实现的,事实上它是用LinearLayout布局一个一个堆起来的。
2.原理
通过判断ListView上点击的项的位置,我们切换不同的选择器,当然这个切换的动作我们需要定义在重写ListView的onInterceptTouchEvent()方法中。
02 |
if (itemnum==(getAdapter().getCount()- 1 )){
|
04 |
setSelector(R.drawable.app_list_corner_round);
|
07 |
setSelector(R.drawable.app_list_corner_round_top);
|
09 |
} else if (itemnum==(getAdapter().getCount()- 1 ))
|
11 |
setSelector(R.drawable.app_list_corner_round_bottom);
|
14 |
setSelector(R.drawable.app_list_corner_shape);
|
3.定义选择器
如果只有一项,我们需要四个角都是圆角,app_list_corner_round.xml文件定义如下:
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
03 |
< gradient android:startColor = "#B5E7B8" |
04 |
android:endColor = "#76D37B" |
06 |
< corners android:topLeftRadius = "4dip"
|
07 |
android:topRightRadius = "4dip"
|
08 |
android:bottomLeftRadius = "4dip"
|
09 |
android:bottomRightRadius = "4dip" />
|
如果是顶部第一项,则上面两个角为圆角,app_list_corner_round_top.xml定义如下:
1 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
3 |
< gradient android:startColor = "#B5E7B8" |
4 |
android:endColor = "#76D37B" |
6 |
< corners android:topLeftRadius = "4dip"
|
7 |
android:topRightRadius = "4dip" />
|
如果是底部最后一项,则下面两个角为圆角,app_list_corner_round_bottom.xml定义如下:
1 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
3 |
< gradient android:startColor = "#B5E7B8" |
4 |
android:endColor = "#76D37B" |
6 |
< corners android:bottomLeftRadius = "4dip"
|
7 |
android:bottomRightRadius = "4dip" />
|
如果是中间项,则应该不需要圆角, app_list_corner_shape.xml定义如下:
1 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
3 |
< gradient android:startColor = "#B5E7B8" |
4 |
android:endColor = "#76D37B" |
4.背景图片
因为默认的情况下,ListView就要显示一个圆角的边框,这个我们使用一张9patch背景图片来实现app_list_corner_border.9.png:
在这里提示一下,做9patch背景图片的时候,记得把内容区域定义为边框线以内的区域。
5. 初步实现
参考前面提供的素材和核心代码,我们初步实现如下:
(1).自定义CornerListView.java:
04 |
public class CornerListView extends ListView {
|
06 |
public CornerListView(Context context) {
|
10 |
public CornerListView(Context context, AttributeSet attrs, int defStyle) {
|
11 |
super (context, attrs, defStyle);
|
14 |
public CornerListView(Context context, AttributeSet attrs) {
|
15 |
super (context, attrs);
|
19 |
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
20 |
switch (ev.getAction()) {
|
21 |
case MotionEvent.ACTION_DOWN:
|
22 |
int x = ( int ) ev.getX();
|
23 |
int y = ( int ) ev.getY();
|
24 |
int itemnum = pointToPosition(x, y);
|
26 |
if (itemnum == AdapterView.INVALID_POSITION)
|
31 |
if (itemnum==(getAdapter().getCount()- 1 )){
|
32 |
setSelector(R.drawable.app_list_corner_round);
|
34 |
setSelector(R.drawable.app_list_corner_round_top);
|
36 |
} else if (itemnum==(getAdapter().getCount()- 1 ))
|
37 |
setSelector(R.drawable.app_list_corner_round_bottom);
|
39 |
setSelector(R.drawable.app_list_corner_shape);
|
44 |
case MotionEvent.ACTION_UP:
|
47 |
return super .onInterceptTouchEvent(ev);
|
这个CornerListView主要处理了点击项的选择器的切换。
(2).列表布局文件和列表项布局文件:
列表布局文件main_tab_setting.xml:
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
03 |
android:orientation = "vertical"
|
04 |
android:layout_width = "fill_parent"
|
05 |
android:layout_height = "fill_parent" >
|
06 |
< com.tianxia.app.floworld.view.CornerListView android:id = "@+id/setting_list"
|
07 |
android:layout_width = "fill_parent" |
08 |
android:layout_height = "wrap_content"
|
09 |
android:layout_margin = "10dip"
|
10 |
android:background = "@drawable/app_list_corner_border"
|
11 |
android:cacheColorHint = "#00000000" >
|
12 |
</ com.tianxia.app.floworld.view.CornerListView >
|
列表项布局文件main_tab_setting_list_item.xml:
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
03 |
android:layout_width = "fill_parent"
|
04 |
android:layout_height = "fill_parent" >
|
05 |
< ImageView android:id = "@+id/setting_list_item_arrow"
|
06 |
android:layout_alignParentRight = "true"
|
07 |
android:layout_centerVertical = "true"
|
08 |
android:layout_width = "wrap_content"
|
09 |
android:layout_height = "fill_parent"
|
10 |
android:layout_marginLeft = "15dip"
|
11 |
android:layout_marginRight = "15dip"
|
12 |
android:src = "@drawable/appreciate_tab_list_item_arrow_small" />
|
13 |
< TextView android:id = "@+id/setting_list_item_text"
|
14 |
android:layout_toLeftOf = "@id/setting_list_item_arrow"
|
15 |
android:layout_width = "fill_parent" |
16 |
android:layout_height = "wrap_content"
|
17 |
android:textSize = "16dip"
|
18 |
android:textColor = "#000000"
|
19 |
android:paddingTop = "10dip"
|
20 |
android:paddingBottom = "10dip"
|
21 |
android:paddingLeft = "10dip" />
|
(3)界面实现
显示界面SettingTabActivity.java:
01 |
public class SettingTabActivity extends Activity{
|
03 |
private CornerListView cornerListView = null ;
|
05 |
private List<Map<String,String>> listData = null ;
|
06 |
private SimpleAdapter adapter = null ;
|
10 |
protected void onCreate(Bundle savedInstanceState) {
|
11 |
super .onCreate(savedInstanceState);
|
12 |
setContentView(R.layout.main_tab_setting);
|
14 |
cornerListView = (CornerListView)findViewById(R.id.setting_list);
|
17 |
adapter = new SimpleAdapter(getApplicationContext(), listData, R.layout.main_tab_setting_list_item , new String[]{ "text" }, new int []{R.id.setting_list_item_text});
|
18 |
cornerListView.setAdapter(adapter);
|
24 |
private void setListData(){
|
25 |
listData = new ArrayList<Map<String,String>>();
|
27 |
Map<String,String> map = new HashMap<String, String>();
|
28 |
map.put( "text" , "图库更新" );
|
31 |
map = new HashMap<String, String>();
|
32 |
map.put( "text" , "收藏图片" );
|
35 |
map = new HashMap<String, String>();
|
36 |
map.put( "text" , "下载目录" );
|
(4).效果图
通过以上实现,我们基本达到了圆角的ListView的效果:
相关推荐
在本案例中,我们探讨的是如何实现一个“圆角ListView”,即ListView的每个条目拥有圆润的边角,而不是传统的直角。这种效果可以使界面看起来更加柔和,更符合现代设计趋势。 首先,我们要明白ListView本身并不直接...
在Android开发中,"圆角listview"是一个常见的需求,特别是在设计美观且用户友好的界面时。这个主题涉及到如何创建一个具有圆角效果的ListView,让每个列表项的背景显示为圆形或椭圆形的边缘,以提升应用的整体视觉...
这个名为"IOS风格的圆角listview.zip"的压缩包文件提供了实现这一目标的源代码。下面将详细解释如何在Android中创建具有圆角效果的ListView。 首先,我们要明白ListView是Android系统中一个重要的组件,用于展示可...
在Android开发中,"圆角Listview"是一个常见的需求,特别是在设计美观且用户友好的界面时。这个概念涉及到了ListView的自定义布局以及对Item视图的边角处理。下面我们将详细探讨如何实现一个带有圆角效果的ListView...
在Android开发中,实现iOS风格的圆角ListView是一种常见的需求,它可以为应用提供更加美观、一致的用户体验。这里我们主要探讨如何在Android中创建这样的组件,以及与GBK编码和编译版本2.3.3相关的注意事项。 首先...
- 对于只有一个项的ListView,我们需要所有四个角都为圆角,可以创建一个名为`app_list_corner_round.xml`的Drawable资源文件,内容如下: ```xml ``` - 如果是顶部第一项,仅需要顶部两个角为圆角,...
在Android开发中,创建具有圆角效果的列表是常见的需求,可以提升应用的用户体验和视觉效果。本教程将详细介绍如何在Android中实现一个类似于iPhone的圆角列表,并且添加事件监听,以便对用户操作做出响应。 首先,...
ListView是一个可以展示多个项的视图,通常用于显示列表数据。在每个ListView的项视图中,我们可以嵌套一个CardView来实现卡片效果。为了实现这一目标,你需要创建一个自定义的ListView适配器,继承自`BaseAdapter`...
本资源"应用源码之listview快速滑动,修改默认的滑动条.zip"聚焦于如何优化ListView的滑动性能以及自定义滚动条,这对于提升用户体验和增强应用程序性能至关重要。下面将详细介绍这两个关键知识点。 首先,我们讨论...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。当用户需要滚动浏览大量数据时,ListView能够高效地加载和显示内容。然而,ListView的默认滚动条可能不符合某些设计需求,开发者可能需要自定义...
在Android开发中,ListView曾是显示可滚动列表数据的标准组件,但随着技术的演进,ListView逐渐被RecyclerView所取代。RecyclerView提供了更强大的功能和更好的性能,使得开发者能够更灵活地控制列表视图的布局和...
Android例子源码IOS风格的圆角分组设置页面 Android例子源码不断保持后台唤醒的例子源码 Android例子源码九宫格密码输入例子 Android例子源码仿QQ的头像选择弹出的对话框 Android例子源码仿多看阅读的左右平移翻页...
在"美女如云"中,`ListView`可能用于展示美女的列表,例如按照不同的类别或地区划分。每个列表项通常会包含一张预览图片、美女的名字和其他相关信息。为了提高性能,开发者会使用`ViewHolder`模式来复用列表项视图,...
- `app:cardPreventCornerOverlap`:若设为true,将防止阴影和圆角重叠,使阴影更好地显示在圆角边缘。 此外,还可以通过自定义样式或者在代码中动态修改CardView的属性来调整阴影。在样式文件中,可以定义一个...
1. **radius(圆角半径)**:通过`app:cardCornerRadius`属性设置,决定了卡片四个角的圆润程度。 2. **elevation(阴影高度)**:通过`app:cardElevation`属性控制,影响卡片的阴影效果,数值越大,阴影越明显。 3....
本教程将引导你如何利用ListView和自定义适配器实现卡片式UI效果。 首先,我们需要了解`CardView`组件。`CardView`是Android Support Library中的一个视图容器,它提供了一个具有阴影效果和圆角的矩形框,常用于...
3. **列表视图(ListView)**:在Flutter中,显示好友列表通常会用到ListView,它可以处理大量的滚动数据。你可以自定义ListView的itemBuilder函数,根据数据模型动态生成列表项。 4. **卡片组件(Card)**:Card...