android自定义TabView实现圆角列表
看到很多应用的设置界面都有圆角效果的列表,类似下面的

下面说说我的实现原理:继承LinearLayout,然后设置一个自定义的TabAdapter,类似于listview,添加一个setAdapter()方法,这个方法就是将子视图加入,然后设置背景选择器效果;还可以添加风格不同的视图,通过addview方法,最后一定要调用commit方法,设置子视图的背景,对于背景有三种情况,中间项四角都是圆角,顶部圆角和顶部圆角效果
自定义TabAdapter抽象类,是要继承即可:
package com.allen.tabview; import android.view.View; /**
* @package:com.allen.tabview
* @author:Allen
* @email:jaylong1302@163.com
* @data:2013-7-26 下午2:49:51
* @description:适配器
*/
public abstract class TabAdapter {
public abstract int getCount();
public abstract Object getItem(int position);
public abstract View getView(int position);
}
接下来是自定义的TabView
package com.allen.tabview; import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout; /**
* @package:com.allen.tabview
* @author:Allen
* @email:jaylong1302@163.com
* @data:2013-7-26 下午2:48:36
* @description:圆角表格
*/
public class TabView extends LinearLayout { TabAdapter adapter;
/** 子视图数量 */
int size = 0; public TabView(Context context) {
super(context);
init();
} public TabView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} void init() {
this.setOrientation(LinearLayout.VERTICAL);
this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
this.setBackgroundResource(R.drawable.background_view_rounded_container);
} /** 设置适配器 */
public void setAdapter(TabAdapter adapter) {
this.adapter = adapter;
// 遍历当前的adapter
if (adapter != null) {
size = adapter.getCount();
for (int i = 0; i < size; i++) {
View child = adapter.getView(i);
this.addView(child);
}
commit();
} } @Override
public void addView(View child) {
// TODO Auto-generated method stub
super.addView(child);
child.setClickable(true);
} /** 调用addView之后执行的方法 */
public void commit() {
int len = this.getChildCount();
if (len > 1) {// 多项内容
for (int i = 0; i < len; i++) {
View child = this.getChildAt(i);
if (i == 0) {// 顶部
child.setBackgroundResource(R.drawable.background_view_rounded_top);
} else if (i > 0 && i < len - 1) {// 中间
child.setBackgroundResource(R.drawable.background_view_rounded_middle);
} else if (i == len - 1) {// 底部
child.setBackgroundResource(R.drawable.background_view_rounded_bottom);
}
}
} else if (len == 1) {// 一项内容
View child = this.getChildAt(0);
child.setBackgroundResource(R.drawable.background_view_rounded_single);
}
} public interface TabItemClickListener {
void onClick(int position, View v);
} TabItemClickListener itemClick; public void setOnItemClickListener(final TabItemClickListener itemClick) {
this.itemClick = itemClick;
// 绑定监听事件
for (int i = 0; i < size; i++) {
final int index = i;
View childView = this.getChildAt(i);
childView.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (itemClick != null) {
itemClick.onClick(index, v);
}
}
});
}
}
}
最后有一点,对于整个最外层的圆角背景是使用inset,那样自动加入了分隔线效果
整个项目在github上面,需要的可以clone和fok。。。
android自定义TabView实现圆角列表的更多相关文章
- android自定义listview实现圆角
在项目中我们会经常遇到这种圆角效果,因为直角的看起来确实不那么雅观,可能大家会想到用图片实现,试想上中下要分别做三张图片,这样既会是自己的项目增大也会增加内存使用量,所以使用shape来实现不失为一种 ...
- Android学习系列(16)--App列表之圆角ListView
有些东西看多了,就厌烦了:extjs对我这种感觉最为强烈.甚至,有时觉得设计之殇是审美疲劳.直角看多了,就想看看圆角,不知何时,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,iphone中 ...
- Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)
一:简介: 在上一篇<Android实现圆形.圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)>博文中,采用BitmapShader方法实现自定义的圆形.圆角等自定 ...
- Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
一.概述 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的.实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader.本文直接继 ...
- Android学习系列(17)--App列表之圆角ListView(续)
http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)- ...
- Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表
本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...
- (转载)Android自定义标签列表控件LabelsView解析
Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ...
- android小知识之圆角ListView
有些东西看多了,就厌烦了:extjs对我这种感觉最为强烈.甚至,有时觉得设计之殇是审美疲劳.直角看多了,就想看看圆角,不知何时,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,iphone中 ...
- (转)[原] Android 自定义View 密码框 例子
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...
随机推荐
- 基于QT的webkit与ExtJs开发CB/S结构的企业应用管理系统
一:源起 1.何为CB/S的应用程序 C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与服务端通信,完成一定的 ...
- [direct-X] direct-X最小框架
#include<d3d9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.l ...
- tomcat安全配置
1. 注释或删除 tomcat-users.xml 所有用户权限,看上去如下: <tomcat-users></tomcat-users> 2. 隐藏tomcat版本信息 1 ...
- [Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium
最近准备深入学习Python相关的爬虫知识了,如果说在使用Python爬取相对正规的网页使用"urllib2 + BeautifulSoup + 正则表达式"就能搞定的话:那么动态 ...
- 酷派大神F2系列使用QPST进行nv备份和恢复,解决无信号问题(附备份文件)
测试机器: 大神F2联通版 8675_W00 系统COOLUI55 写贴原因: 自己无意间刷错了包,结果手机无信号,进入工程模式怎么设置都没有用.尝试过系统还原(备份过).刷新的ROM.线刷, ...
- Leetcode 6 ZigZag Conversion 字符串处理
题意:将字符串排成Z字形. PAHNAPLSIIGYIR 如果是5的话,是这样排的 P I AP YR H L G N SI A I 于是,少年少女们,自己去找规律吧 提示:每个Z ...
- 澳洲最大的华资快递公司ACE 签约动软微信商城系统!
ACE-平安立达快递是澳洲最大的华资快递公司ACE平安立达,总部设在Boxhill,同时在中国成立了进口食品专营连锁加盟店“澳莱优品”,目前已经有近20家加盟店,14年底国内计划开到60家店. 201 ...
- Activiti 删除key值相同的所有不同版本的流程定义
package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...
- 如何向Openstack社区提交一个新项目
前几天有个朋友问我:自己有一个idea不错的项目,也把基本的框架写好了,想贡献到Openstack社区,却不知道应该怎么做.正好之前我有过类似的经历,那么来分享一下我是如何向Openstack社区提交 ...
- 让JNLP应用程序从Firefox浏览器启动起来