两种布局的ListVIew Adapter。例如微信对话界面
这个界面 实现的不是微信对话界面。实现的是,focus的状态下,变为放大的另一种布局
重点:
一、定义类型个数
private final int TYPE_COUNT = 2;
private final int FIRST_TYPE = 0;
private final int OTHERS_TYPE = 1;
二、重写两个函数
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mSelectedPosition) {
return FIRST_TYPE;
} else {
return OTHERS_TYPE;
}
}
public class CallContactListViewAdapter extends BaseAdapter {
public static final String TAG = CallContactListViewAdapter.class.getName();
private final int TYPE_COUNT = 2;
private final int BIG_TYPE = 0;
private final int SMALL_TYPE = 1;
private int currentType;
private List<ContactIndex> mContactList;
private Context mContext;
private LayoutInflater layoutInflater;
private int mSelectedPosition = -1;
private Bitmap mBitmap = null;
// private Matrix mMatrix;
public CallContactListViewAdapter(Context context,
List<ContactIndex> contactList) {
mContext = context;
mContactList = contactList;
this.layoutInflater = LayoutInflater.from(context);
// mMatrix = new Matrix();
// mMatrix.postScale(0.6f,0.6f);
}
public void setSelectItem(int position) {
mSelectedPosition = position;
}
/*
* (non-Javadoc)
*
* @see android.widget.Adapter#getCount()
*/
@Override
public int getCount() {
// Log.d(TAG, "contact list size:" + mContactList.size());
return mContactList.size();
}
/*
* (non-Javadoc)
*
* @see android.widget.Adapter#getItem(int)
*/
@Override
public Object getItem(int position) {
if (position >= 0 && position < mContactList.size()) {
return mContactList.get(position);
// return mList.get(position % mList.siez());
}
return null;
}
/*
* (non-Javadoc)
*
* @see android.widget.Adapter#getItemId(int)
*/
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mSelectedPosition) {
return BIG_TYPE;
} else {
return SMALL_TYPE;
}
}
/*
* (non-Javadoc)
*
* @see android.widget.Adapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Log.d(TAG, "position:" + position);
ViewHolder viewHolder = null;
currentType = getItemViewType(position);
System.out.println("type=" + currentType);
if (currentType == BIG_TYPE) {
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.call_item, null);
viewHolder.friendPic = (ImageView) convertView
.findViewById(R.id.callFriendPic);
viewHolder.friendName = (TextView) convertView
.findViewById(R.id.callFriendName);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
} else {
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.call_item_small,
null);
viewHolder.friendPic = (ImageView) convertView
.findViewById(R.id.callFriendPic);
viewHolder.friendName = (TextView) convertView
.findViewById(R.id.callFriendName);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
}
// if(mSelectedPosition == position){
// viewHolder.friendPicBorder.setVisibility(View.VISIBLE);
// viewHolder.friendName.setTextSize(mContext.getResources().getDimension(R.dimen.callListNameTextSizeBig));
// }
// else{
// mBitmap = BitmapFactory.decodeResource(mContext.getResources(),
// mContactList.get(position).getPicId());
// Bitmap resizeBmp =
// Bitmap.createBitmap(mBitmap,0,0,mBitmap.getWidth(),mBitmap.getHeight(),mMatrix,true);
// viewHolder.friendPic.setImageBitmap(resizeBmp);
// }
viewHolder.friendPic.setImageResource(mContactList.get(position)
.getPicId());
viewHolder.friendName.setText(mContactList.get(position).getUserName());
return convertView;
}
private static class ViewHolder {
ImageView friendPic;
TextView friendName;
}
}
三、TV 版本中,ListView 首尾循环相接的方法:
即,到了最后一个,再按向下键的时候,跳到第一个
到了第一个,再按向上键的时候,跳到最后一个
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN:
if (mOldPosition == mContactListAdapter.getCount() - 1) {
mCallContactListContainer.setSelection(0);
}
break;
case KeyEvent.KEYCODE_DPAD_UP:
if (mOldPosition == 0) {
mCallContactListContainer.setSelection(mContactListAdapter
.getCount() - 1);
}
break;
}
return super.onKeyDown(keyCode, event);
}
如果是触屏,涉及到滚动,就比较麻烦
四、 Adapter中自定义的方法 用来在Activity中,一个处于focus状态的item的position
public void setSelectItem(int position) {
mSelectedPosition = position;
}
Activity中,给ListView设置选中的Listener
mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView,
View view, int position, long arg3) {
mMyAdapter.setSelectItem(position);
mMyAdapter.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
两种布局的ListVIew Adapter。例如微信对话界面的更多相关文章
- RecyclerView添加两种布局
简介: 本篇博客主要介绍如何在RecyclerView中添加两种布局 思路:主要重写Recyclerview.Adapter中的一些方法 1.public int getItemViewType(in ...
- Android 常用UI控件之TabHost(1)TabHost的两种布局方式
TabHost是Android中的tab组件. TabHost布局文件的基本结构 TabHost下有个layout,这个layout中有TabWidget与FrameLayout.TabWidget是 ...
- Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...
- 两种经典电商CSS布局
圣杯布局和双飞翼布局! 两种布局功能相同,都是为了实现两端宽度固定,中间宽度自适应的三栏布局 圣杯布局: 三个区域都处于左浮动状态,并使main的宽度成父容器的100% 为两侧侧边栏添加负margin ...
- 七种CSS左侧固定,右侧自适应两栏布局
一 两栏布局基本HTML和CSS 首先创建基本的HTML布局和最基本的样式. 基本的样式是,两个盒子相距20px, 左侧盒子宽120px,右侧盒子宽度自适应 <div class="w ...
- bootstrap的栅格布局与两列布局结合使用
在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适 ...
- TouTiao开源项目 分析笔记15 新闻详情之两种类型的实现
1.预览效果 1.1.首先看一下需要实现的效果. 第一种,文字类型新闻. 第二种,图片类型新闻. 1.2.在NewsArticleTextViewBinder中设置了点击事件 RxView.click ...
- 实现顶部轮播,下部listview经典布局的两种方式
开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...
- ListView加载两种以上不同的布局
不同的项目布局(item layout) Listview一种单一的item 布局有时候不能完全满足业务需求,我们需要加载两种或两种以上不同的布局,实现方法很简单: 重写 getViewTypeCou ...
随机推荐
- cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表
Of course, like any technology MongoDB has its strengths and weaknesses. MongoDB is designed for OLT ...
- scrum meeting 1st
现状分析 这是一个新项目,在之前的阶段中,基本完成了用户需求分析,在具体实现方面,团队大部分处于初学阶段,需要时间学习试验,预计刚开始项目进展较慢,alpha阶段时间相对紧迫,打算先实现网站的基本功能 ...
- hadoop_异常_02_ExitCodeException exitCode=1: chmod: changing permissions of `/ray/hadoop/dfs/data': Operation not permitted
一.异常现象 启动hadoop时,datanode启动失败,出现如下异常: 2018-03-23 14:39:09,962 WARN org.apache.hadoop.hdfs.server.dat ...
- commons-dbcp连接池的使用
数据库连接池 池参数(所有池参数都有默认值): 初始大小: 最小空闲连接数: 增量:一次创建的最小单位(5个) 最大空闲连接数:12个 最大连接数:20个 最大的等待时间:1000毫秒 四大连接参数: ...
- matrix-gui-2.0 将javascript文件夹改成js文件夹
/******************************************************************************** * matrix-gui-2.0 将 ...
- Linux之时间、地点、人物、事件、情节
时间 date 显示当前时间 time cmd 显示 cmd的运行时间 地点 locate 根据文件名,迅速找到文件.基于系统构建的索引 find 根据各种规则找到文件,更强大,但比较慢 wherei ...
- [转]Cache-Control max-age=0
Cache-Control max-age=0 Cache-Control no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验.这对于需要确认认证应用很有用(可以和 ...
- Cloudera API访问
多租户管理页面(admin)操作 cloudera 管理页面页面操作多租户是这样的: 进入到YARN的服务页面,点击Resource Pool,你将会看到已经存在的资源池,然后再点击资源池表格右上角的 ...
- CF 949C Data Center Maintenance——思路+SCC
题目:http://codeforces.com/contest/949/problem/C 可以想到可能是每组c有连边的可能. 但别直接给c1.c2连边,那样之后会变得很不好做. 可以把一些限制放在 ...
- maven工程编译成jar包
在pom文件的project节点下增加build节点,mvn package即可 <build> <plugins> <plugin> <artifactId ...