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步骤 ...
随机推荐
- C#中 ToString 和 override ToString 的区别
public class p { public string ToString(){ return "p"; } } public class c:p{ public string ...
- 自己动手写UI库——引入ExtJs(布局)
第一: 来看一下最终的效果 第二: 来看一下使用方法: 第三: Component类代码如下所示: public class Component { pub ...
- 《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)
两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存 ...
- jQuery演示10种不同的切换图片列表动画效果以及tab动画演示 2
很常用的一款特效纯CSS完成tab实现5种不同切换对应内容效果 实例预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- 点击div外面该div消失(二)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 理解Javascript的异步等待
目前async / await特性并没有被添加到ES2016标准中,但不代表这些特性将来不会被加入到Javascript中.在我写这篇文章时,它已经到达第三版草案,并且正迅速的发展中.这些特性已经被I ...
- AdaBoost算法简介
一.AdaBoost的损失函数 AdaBoost优化的是指数损失,即\begin{align*} \mathbb{E}_{\boldsymbol{x} \sim \mathfrak{D}, y}[e^ ...
- javascript图片懒加载与预加载的分析
javascript图片懒加载与预加载的分析 懒加载与预加载的基本概念. 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片, ...
- Android MultiDex兼容包怎么使用?
在Android系统中安装应用的时候,需要对Dex进行优化,但由于其处理工具DexOpt的限制,导致其id的数目不能够超过65536个.而MultiDex兼容包的出现,就很好的解决了这个问题,它可以配 ...
- SQL Server 内存中OLTP内部机制概述(四)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...