看到有朋友在群里问过ListView项达到一定数量时加不同色选项的功能,有时间就学习了下ListView隔行换色的效果,大体效果实现出来了,吼吼,写博客里面,跟大家学习交流,一样的,先贴效果,再上代码,效果图如下:
一:五行换色效果
![]()
二:快速拖动块显示效果
![]()
三:循环从0开始时的效果图三 这个地方贴此图原因大家看主控制代码中的注释
![]()
四:循环从0开始时的效果图四
![]()
五:单击按钮后触发事件(小工具做的,有点失真,真机上正常的,大家放心)
![]()
六:工程结构图如下
![]()
七:主控制类代码如下:
- package com.xiaoma.listviewbackground;
-
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeSet;
-
- import android.app.Activity;
- import android.app.Dialog;
- import android.app.ProgressDialog;
- import android.content.Context;
- import android.graphics.drawable.Drawable;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemSelectedListener;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
-
-
-
-
-
-
-
- public class ListViewBackgroundDemoActivity extends Activity
- implements OnItemSelectedListener{
-
- private ListView lv = null;
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- lv = (ListView)findViewById(R.id.listview);
-
-
-
-
-
-
- lv.setFastScrollEnabled(true);
- lv.setOnItemSelectedListener(this);
- lv.setAdapter(new ListDemoAdapter(getApplicationContext()));
- }
-
-
-
-
-
-
-
- private class ListDemoAdapter extends BaseAdapter{
-
- private static final int ITEM = 0;
- private static final int SEPARATOR = 1;
- private static final int TYPE_MAX_COUNT = SEPARATOR + 1;
- private LayoutInflater inflater = null ;
- private List<String> listItem = new ArrayList<String>();
-
-
-
-
-
-
-
-
-
-
-
-
-
- @SuppressWarnings("rawtypes")
-
- private TreeSet set = new TreeSet();
- private Map map = new HashMap();
-
- public ListDemoAdapter(Context context ){
- this.inflater = LayoutInflater.from(context);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- for(int i=1;i<=50;i++){
- this.listItem.add("添加的第"+i+"条数据");
- if(i%6 == 0){
- addSeparatorItem();
- }
- Log.i("KKK", "添加的第"+i+"条数据");
- }
- }
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public void addSeparatorItem() {
- set.add(listItem.size()-1);
- notifyDataSetChanged();
- }
-
-
-
-
-
-
- @Override
- public int getItemViewType(int position) {
- return set.contains(position) ? SEPARATOR : ITEM;
- }
-
-
-
-
- @Override
- public int getViewTypeCount() {
- return TYPE_MAX_COUNT;
- }
-
- @Override
- public int getCount() {
- return listItem.size();
- }
-
- @Override
- public Object getItem(int position) {
- return listItem.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
-
-
-
-
-
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- int type = getItemViewType(position);
- XiaoMa xiaoMa = null;
- final int location = position;
- if(convertView == null){
- switch (type) {
-
- case ITEM:
- xiaoMa = new XiaoMa();
- convertView = inflater.inflate(R.layout.listview_items, null);
- xiaoMa.iv = (ImageView)convertView.findViewById(R.id.ItemImage);
- xiaoMa.tv = (TextView)convertView.findViewById(R.id.ItemTitle);
- xiaoMa.text = (TextView)convertView.findViewById(R.id.itemtext);
- xiaoMa.btn = (Button)convertView.findViewById(R.id.view_btn);
- break;
-
- case SEPARATOR:
- xiaoMa = new XiaoMa();
- convertView = inflater.inflate(R.layout.listview_items, null);
- xiaoMa.iv = (ImageView)convertView.findViewById(R.id.ItemImage);
- xiaoMa.tv = (TextView)convertView.findViewById(R.id.ItemTitle);
- xiaoMa.text = (TextView)convertView.findViewById(R.id.itemtext);
- xiaoMa.btn = (Button)convertView.findViewById(R.id.view_btn);
- convertView = inflater.inflate(R.layout.separator, null);
-
-
-
-
-
- Drawable drawable2 = getResources().getDrawable(R.drawable.gradient_box);
- xiaoMa.sep = (TextView)convertView.findViewById(R.id.sep);
- xiaoMa.sep.setBackgroundDrawable(drawable2);
- break;
- }
-
-
-
-
-
- convertView.setTag(xiaoMa);
- }else{
- xiaoMa = (XiaoMa)convertView.getTag();
- }
- xiaoMa.iv.setBackgroundResource(R.drawable.xiaolvzi);
- xiaoMa.tv.setText("这是第"+(position+1)+"个标题");
- xiaoMa.text.setText("这是第"+(position+1)+"个概述");
-
-
-
- xiaoMa.btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
-
- ShowDialog(location);
- }
- });
-
- return convertView;
- }
-
- }
-
-
-
-
-
-
-
- private void ShowDialog(int posi){
- Toast.makeText(getApplicationContext(), "单击了第"+(posi+1)
- +"个按钮", Toast.LENGTH_SHORT).show();
-
-
-
-
- showDialog(1);
-
-
-
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Log.i("KKK", "已进入睡眠");
- Thread.sleep(3000);
- dismissDialog(1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
-
-
- @Override
- protected Dialog onCreateDialog(int id) {
-
-
-
-
-
- ProgressDialog dialog = new ProgressDialog(this);
-
- dialog.setCancelable(false);
- dialog.setIcon(getResources().getDrawable(R.drawable.xiaolvzi));
- dialog.setTitle("那些年,我们一起追的女孩");
- dialog.setMessage("小马果 呆丫头 O_O");
- dialog.show();
- return dialog;
- }
-
-
-
-
-
-
-
-
- public final class XiaoMa{
- public ImageView iv ;
- public TextView tv ;
- public Button btn ;
- public TextView text;
- public TextView sep;
- }
-
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position,
- long id) {
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- }
- }
八:临时测试类代码如下(小儿科的东西,但还是注意下):
- package com.xiaoma.listviewbackground;
-
-
-
-
-
-
-
-
- public class PercentTest {
- public static void main(String[] args) {
- int a = 15;
- int b = 9;
- System.out.println("9%15 = "+9%15);
- System.out.println("15%9 = "+15%9);
- }
- }
九:看代码大家一定注意仔细看下小马注释部分,主布局代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
-
- <!-- Back Up <ListView
- android:id="@+id/listview"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:smoothScrollbar="true"
- android:drawSelectorOnTop="false"
- android:listSelector="#00000000"
- />
- -->
-
-
- <ListView
- android:id="@+id/listview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:smoothScrollbar="true"
- android:choiceMode="none"
- android:focusable="false" android:scrollingCache="false"
- android:clickable="false" android:dividerHeight="0.5dip"
- />
-
- <!-- <ListView android:id="@+id/list_coupon"
- android:layout_height="wrap_content"
- android:drawSelectorOnTop="false" android:choiceMode="none"
- android:focusable="false" android:scrollingCache="false"
- android:fadingEdge="none" android:focusableInTouchMode="false"
- android:clickable="false" android:dividerHeight="0.5dip"
- android:divider="@drawable/separator" />
- -->
- </LinearLayout>
最后,还是跟往常一样,如果代码没详细看的,可以下载下此小DEMO源码,共同学习交流下,这个里面还是有很多地方可以改进的,只是写个思路,这里面问题还是蛮多的,如果觉得代码不清楚,有问题了还请大家多指点指点,小马在此先谢过啦,谢谢...加油!