android 评论盖楼,Android 使用ListView实现网易评论盖楼效果
效果如下:( 点击下载演示)
本人已经开源到了TaoCode,可以使用SVN免费更新下来:http://code.taobao.org/svn/nestlistview/trunk
实现原理:顶部利用了ListView的HeadView来实现,然后其他每个item都用背景实现!
首先设置一些常量:
public class NestHelper {
public static final int BACK_COLOR = 0xFFF8F3D5;// 背景色
public static final int LINE_COLOR = 0xFF5A595A;// 线颜色
public static final int LINE_WIDTH = 2;// 线的宽度(要偶数)
public static final int LINE_SPAN = 4;// 线的间距
}
每个项目的背景实现最为核心,请看代码:
public class NestItemLayout extends FrameLayout implements NestNotifyData {
public NestItemLayout(Context context) {
super(context);
}
public NestItemLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NestItemLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@SuppressWarnings("deprecation")
@Override
public void notifyDataSetChanged(int count, int position) {
setBackgroundDrawable(new NestDrawable(count, position));
}
/** 绘制item Layout背景 两边跟底部 */
class NestDrawable extends Drawable {
private int linsCount = 0;// 两边各有多少条线
private int span = 0;// 一条线的宽度(线加线之间距)
public NestDrawable(int count, int position) {
linsCount = count - position;
if (linsCount > 5) {
linsCount = 5;// 一边最多5条
}
span = (NestHelper.LINE_WIDTH + NestHelper.LINE_SPAN);
setPadding(span * linsCount, 0, span * linsCount,
NestHelper.LINE_WIDTH);
}
@Override
public void draw(Canvas canvas) {
canvas.drawColor(NestHelper.BACK_COLOR);
Paint paint = new Paint();
paint.setColor(NestHelper.LINE_COLOR);
paint.setStrokeWidth(NestHelper.LINE_WIDTH);
// 绘制底部线
canvas.drawLine(span * (linsCount - 1), getHeight()
- NestHelper.LINE_WIDTH / 2, getWidth() - span
* (linsCount - 1), getHeight() - NestHelper.LINE_WIDTH / 2,
paint);
for (int i = 0; i < linsCount; i++) {
// 绘制左边线
canvas.drawLine(span * i + NestHelper.LINE_WIDTH / 2, 0, span
* i + NestHelper.LINE_WIDTH / 2, getHeight(), paint);
// 绘制右边线
canvas.drawLine(getWidth() - span * i - NestHelper.LINE_WIDTH
/ 2, 0, getWidth() - span * i - NestHelper.LINE_WIDTH
/ 2, getHeight(), paint);
;
}
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
@Override
public int getOpacity() {
return 0;
}
}
}
最后重写ListView控件:
public class NestListView extends ListView implements NestNotifyData {
private NestHeadView headView;
public NestListView(Context context) {
super(context);
initView();
}
public NestListView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public NestListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
private void initView() {
headView = new NestHeadView(getContext());
addHeaderView(headView);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
@Override
public void notifyDataSetChanged(int count, int position) {
headView.notifyDataSetChanged(count, position);
}
public NestNotifyData getNotifyData() {
return this;
}
}
Adatper:
package com.cyy.nestlistview;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.cyy.widget.NestNotifyData;
/**
* @see http://blog.csdn.net/chenlove1
* @author chenyingyou
*
*/
public class NestAdapter extends BaseAdapter {
private List list;
private Context context;
public NestAdapter(Context context, List list) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
convertView = LayoutInflater.from(context).inflate(
R.layout.item_nest, null);
}
((TextView) convertView.findViewById(R.id.tv_item)).setText(list
.get(position));
if (convertView instanceof NestNotifyData) {
((NestNotifyData) convertView).notifyDataSetChanged(list.size(),
position);
}
return convertView;
}
}
android 评论盖楼,Android 使用ListView实现网易评论盖楼效果相关推荐
- Android网易评论盖楼效果实现
下面是一个主要的方法: /** * 递归加载楼层的方法 * * @param context上下文的对像 * @param 递归的控制参数 * ,同时也是取用户评论信息和背景色的下标,引参数的大小必须 ...
- android微信点赞ui,Android中使用PopupWindow 仿微信点赞和评论弹出
微信朋友圈的点赞和评论功能,有2个组成部分:左下角的"更多"按钮:点击该按钮后弹出的对话框: PopupWindow,弹出框使用PopupWindow实现,这是点赞和评论的载体,具 ...
- android 微信点赞功能,Android 仿微信点赞和评论弹出框
wjntekaqskfhwktpgpvzhp 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 左下角的"更多"按钮: 点击该按钮后弹出的对话框: 微信朋友圈点赞和评 ...
- Android评论工具类,实现QQ空间文字评论效果
方便使用的评论工具类,而且能监听到小键盘消失事件,能返回小键盘的高度,追踪评论位置. 只是评论功能,木有表情等其他的东东(表情目前都用VP+GV写的,正在尝试使用一个VIew来做分页) 具体文件中有注 ...
- [Android精品源码] Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
Material Design中文版Code4APPPHP100UI4APP 开启辅助访问设为首页收藏本站快捷导航切换到宽版切换风格 石刚 | |我的 |签到打卡 |设置 |消息 |提醒(2) |退出 ...
- android开发 一个更优的listView的写法
android开发 一个更优的listView的写法 布局xml <?xml version="1.0" encoding="utf-8"?> &l ...
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)...
1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为 2,为了使LISTVIEW的ITEM在点 ...
- android开发小技巧:实现listview异步加载图片
2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...
- 我的Android进阶之旅------Android二级ListView列表的实现
实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...
最新文章
- 4-20模块 序列化模块 hashlib模块
- Java 集合系列06: Vector深入解析
- poj12652954 [皮克定理 格点多边形]【学习笔记】
- boost::transform_iterator用法的测试程序
- Android 动画效果及Interpolator和AnimationListener的使用
- 第一次给知名项目贡献代码,有点紧张
- 【debug】python打包成exe,太大了该怎么解决?
- linux 下自动重启tomcat的脚本(支持shell杀进程)
- 安装nginx、drizzle和lua
- PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现
- 百变方块java代码_多牛百变方块
- Linux之iNodeclient客户端定制和安装
- 真鱼游来游去动态壁纸_真鱼动态壁纸
- 银行那些事儿--银行会计
- linux获取ip上网,linux dhcp 获取ip地址能上网,设置静态ip地址则不能上网
- 怎么实现在FireFox IE Opera Safari 都可以正常播放WMV和MOV的网页播放器代码
- Linux中升级GLIBC,终结版,测试通过
- 浅谈MySQL Binlog
- 上半年要写的博客文章30
- 可扩展java游戏框架实践之java飞机大战
热门文章
- 角谷定理python每次输出数_角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。...
- 艾美捷硝酸盐/亚硝酸盐荧光法检测试剂盒基本参数说明
- 总结HTTP中常见的一些名词
- 程序员的自我修养,陈逸鹤
- java计算机毕业设计综合测评系统源码+数据库+系统+lw文档+mybatis+运行部署
- 【Markdown】上下标
- 处理新浪微博中@ #等格式 蓝色高亮~ 表情 以及点击事件
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
- 华为电脑linux指纹,华为朱臣才:MateBook指纹解锁仅需一触
- centos 7 jenkins一健发布asp.net项目