首页 > 移动开发 > android:listview实现qq,微信好友列表

android:listview实现qq,微信好友列表

首先附上运行结果:

 


 

如果你没有学过listview请你先看一看基本知识。不想再说的那么细了 太多了。

 

首先是listview布局

 

 

 

[html]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ListView xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:id="@+id/lv_view"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:cacheColorHint="#00000000"
  7.     android:background="@drawable/back"
  8.     android:orientation="vertical" >
  9. </ListView>

在这里我为什么这样设置

 

 

[html]
  1. android:cacheColorHint="#00000000"
  2. android:background="@drawable/back"

 

     在 Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背 很简单只需要准备一张图片然后指定属性android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现 背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
 这是什么原因导致的呢?起初我以为是因为我把背景设置成了白色,然后产生色差导致的,后来查阅资料发现,其实这个要从Listview的 效果说起,默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示 内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做android:cacheColorHint的属性,在黑色主题 下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的,那怎么办呢? 
       如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。

 

以上文字转自:http://blog.csdn.net/mad1989/article/details/7590122

 

 

 

由于我们使用的好友列表向比较复杂,一个ImageView两个TextView.,所以要自定义adapter.下面的TextView是我自己创建的TextView为了实现昵称和个性签名的滚动效果。由于占用资源太多 不推荐所有人的昵称和个性签名都滚动哦,只要获得焦点的滚动就好了。我就不改了 交给你了

 

MyTextView.class

 

 

 

[java]
  1. package com.example.friendlist.mytextview;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.widget.TextView;
  5. public class MyTextView extends TextView{
  6.     public MyTextView(Context context, AttributeSet attrs, int defStyle) {
  7.         super(context, attrs, defStyle);
  8.         // TODO Auto-generated constructor stub
  9.     }
  10.     public MyTextView(Context context, AttributeSet attrs) {
  11.         super(context, attrs);
  12.         // TODO Auto-generated constructor stub
  13.     }
  14.     public MyTextView(Context context) {
  15.         super(context);
  16.         // TODO Auto-generated constructor stub
  17.     }
  18.     //一直return true  
  19.     @Override
  20.     public boolean isFocused() {
  21.         // TODO Auto-generated method stub
  22.         return true;
  23.     }
  24. }

自定义adapter引用的布局文件

 

[html]
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="wrap_content"
  4.     android:layout_height="wrap_content"
  5.     android:paddingBottom="@dimen/activity_vertical_margin"
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"
  7.     android:paddingRight="@dimen/activity_horizontal_margin"
  8.     android:paddingTop="@dimen/activity_vertical_margin"
  9.     tools:context=".FirendListActivity" >
  10.     <ImageView
  11.         android:id="@+id/iv_picture"
  12.         android:layout_alignParentLeft="true"
  13.         android:layout_width="60dp"
  14.         android:layout_height="60dp"
  15.         android:src="@drawable/pic1"
  16.         />
  17.     <com.example.friendlist.mytextview.MyTextView
  18.         android:id="@+id/tv_nickname"
  19.         android:layout_width="wrap_content"
  20.         android:layout_height="wrap_content"
  21.         android:layout_toRightOf="@id/iv_picture"
  22.         android:maxEms="4"
  23.         android:singleLine="true"
  24.         android:ellipsize="marquee"
  25.         android:layout_centerInParent="true" />
  26.     <com.example.friendlist.mytextview.MyTextView
  27.         android:id="@+id/tv_description"
  28.         android:layout_width="wrap_content"
  29.         android:layout_height="wrap_content"
  30.         android:layout_alignParentRight="true"
  31.         android:layout_centerInParent="true"
  32.         android:maxEms="8"
  33.         android:singleLine="true"
  34.         android:ellipsize="marquee" />
  35. </RelativeLayout>

 

自定义adapter代码

 

Myadapter.class

 

 

 

[java]
  1. package com.example.friendlist.MyAdapter;
  2. import java.util.List;
  3. import com.example.friendlist.R;
  4. import com.example.friendlist.peopleInformation.People_information;
  5. import android.content.Context;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.webkit.WebView.FindListener;
  9. import android.widget.BaseAdapter;
  10. import android.widget.ImageView;
  11. import android.widget.TextView;
  12. public class MyAdapter extends BaseAdapter{
  13.     private List<People_information> mData;
  14.     private Context context;
  15.     public void setmData(List mData) {
  16.         this.mData = mData;
  17.     }
  18.     public void setContext(Context context) {
  19.         this.context = context;
  20.     }
  21.     //决定了列表item显示的个数
  22.     @Override
  23.     public int getCount() {
  24.         // TODO Auto-generated method stub
  25.         return mData.size();
  26.     }
  27.     //根据position获取对应item的内容
  28.     @Override
  29.     public Object getItem(int position) {
  30.         // TODO Auto-generated method stub
  31.         return mData.get(position);
  32.     }
  33.     //获取对应position的item的ID
  34.     @Override
  35.     public long getItemId(int position) {
  36.         // TODO Auto-generated method stub
  37.         return position;
  38.     }
  39.     //创建列表item视图
  40.     @Override
  41.     public View getView(int position, View convertView, ViewGroup arg2) {
  42.         // TODO Auto-generated method stub
  43.         View view=View.inflate(context, R.layout.item_fridends, null);
  44.         //获取item对应的数据对象
  45.         People_information people=mData.get(position);
  46.         //初始化view
  47.         ImageView iv_picture=(ImageView) view.findViewById(R.id.iv_picture);
  48.         TextView tv_nickname=(TextView) view.findViewById(R.id.tv_nickname);
  49.         TextView tv_description=(TextView) view.findViewById(R.id.tv_description);
  50.         //绑定数据到view
  51.         iv_picture.setImageResource(people.getDraw_Id());
  52.         tv_nickname.setText(people.getNickname());
  53.         tv_description.setText(people.getDescription());
  54.         return view;
  55.     }
  56. }

 

我创建了一个个人信息的对象包括头像和昵称,个性签名,为了在加入List里面方便

 

 

 

[java]
  1. package com.example.friendlist.peopleInformation;
  2. public class People_information {
  3.     private int draw_Id;
  4.     private String nickname;
  5.     private String description;
  6.     public int getDraw_Id() {
  7.         return draw_Id;
  8.     }
  9.     public void setDraw_Id(int draw_Id) {
  10.         this.draw_Id = draw_Id;
  11.     }
  12.     public String getNickname() {
  13.         return nickname;
  14.     }
  15.     public void setNickname(String nickname) {
  16.         this.nickname = nickname;
  17.     }
  18.     public String getDescription() {
  19.         return description;
  20.     }
  21.     public void setDescription(String description) {
  22.         this.description = description;
  23.     }
  24. }

然后就是MainActivity.class了,我把所有人的头像信息,昵称 个性签名都保存在了数组里面。

 

 

[java]
  1. package com.example.friendlist;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.example.friendlist.MyAdapter.MyAdapter;
  5. import com.example.friendlist.peopleInformation.People_information;
  6. import android.os.Bundle;
  7. import android.app.Activity;
  8. import android.view.Menu;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.AdapterView.OnItemClickListener;
  12. import android.widget.ListView;
  13. import android.widget.Toast;
  14. public class FirendListActivity extends Activity {
  15.     private int id[]={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4
  16.             ,R.drawable.pic5,R.drawable.pic6,R.drawable.pic7,R.drawable.pic8,R.drawable.pic9};
  17.     private String nickName[]={"宁静","白衣未央","苏染","浮生物语","沫去丶","要想成功必须强大","你是病毒我却不忍用360",
  18.             "超级无敌噼里啪啦大boss","止不住那流逝的年华"};
  19.     private String description[]={"我的人生只是一道直线,转弯就是因为想遇见你","时间,让深的东西越来越深,让浅的东西越来越浅。","弱水三千,我只取一勺,可是到最后我悲惨的发现我的居然是漏勺。",
  20.             "口上说着释然的人最终心里会疼痛到不能言语","我多想带你去看看以前还没爱上你的我","知道雪为什么是白色吗 因为它忘记了自己曾经的颜色",
  21.             "好想轰轰烈烈爱她一遍,好想平平淡淡陪他一生","Say bye bye to my love !","只有在他无聊没人玩寂寞空虚的时候才会过来和你说几句话"
  22.             };
  23.     private ListView lv_view;
  24.     private MyAdapter myAdapter;
  25.     @Override
  26.     protected void onCreate(Bundle savedInstanceState) {
  27.         super.onCreate(savedInstanceState);
  28.         setContentView(R.layout.view_listview);
  29.         lv_view=(ListView) findViewById(R.id.lv_view);
  30.         myAdapter=new MyAdapter();
  31.         myAdapter.setContext(this);
  32.         myAdapter.setmData(getList());
  33.         lv_view.setAdapter(myAdapter);
  34.         lv_view.setOnItemClickListener(new OnItemClickListener() {
  35.             @Override
  36.             public void onItemClick(AdapterView<?> arg0, View arg1, int position,
  37.                     long arg3) {
  38.                 // TODO Auto-generated method stub
  39.                 People_information people=(People_information) myAdapter.getItem(position);
  40.                 Toast.makeText(FirendListActivity.this"昵称:"+people.getNickname()+"\n个性签名:"+people.getDescription(), 0).show();
  41.             }
  42.         });
  43.     }
  44.     private List<People_information> getList() {
  45.         List <People_information>list=new ArrayList<People_information>();
  46.         for(int i=0;i<id.length;i++){
  47.             People_information people=new People_information();
  48.             people.setDraw_Id(id[i]);
  49.             people.setDescription(description[i]);
  50.             people.setNickname(nickName[i]);
  51.             list.add(people);
  52.         }
  53.         return list;
  54.     }
  55. }

就这么多。。


本文固定链接: http://www.devba.com/index.php/archives/6491.html | 开发吧

报歉!评论已关闭.