ListView下拉刷新(1)

124 阅读1分钟

ListView下拉刷新(1):

自定义ListView 添加一个HeaderView

\

(0)初始时设置headerView 的topPadding = -headerHead,将headerView隐藏;

 在向下拉的过程(MOVE)

(1)提示下拉可以刷新, (-headerHead, headerHead+50]

手指保持在屏幕上, 向上移动,变为(0)隐藏\

(2)松开可以刷新  ( headerHead+50,  headerHead+150]

手指保持在屏幕上, 向上移动,变为(1)

(DOWN)  

在(1)的状态下, 松开手指,变为(0)

在(2)的状态下,松开手指, 变为刷新,

\

在设置headerView 的位置之前, 首先测量HeaderView 并通知父容器为

其分配控件

(1)获取参数布局, 

ViewGroup.LayoutParams lp  = view.getLayoutParams();

如果lp为空(headerView还未添加到父容器中, 或者。。。), 创建布局

lp = new LayoutParams(ViewGroup.LayoutParams.match_parent, ViewGroup.LayoutParams.warp_content);

  (3)根据布局设置view的高度和宽度

int width = ViewGroup.getChildMeasureSpec(0, 0, lp.width);//由于上面布局 的宽度设置为match_parent

int height = ;//高度是wrap_content;

获取建议的高度 int tempHeight = lp.height;

更具header的height的设置

if(temp < 0){

height = MeasureSpec.makeMeasure(tmpHeight, EXACTLY)

}   else {

height = MeasureSpec.makeMeasure(tmpHeight, UNSPECIFIED)

       }

(4)最重要一步,根据测量的值,设置view, 通知父容器

view.measure(width, height);

\

\

/**
	 * 测量顶部布局,并通知容器,设置顶部布局的高度和宽度
	 */
	private void measureView(View view) {
		//获取布局参数
		ViewGroup.LayoutParams lp   =  view.getLayoutParams();
		if(lp == null){
			lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
					ViewGroup.LayoutParams.WRAP_CONTENT);
		}

		int width = ViewGroup.getChildMeasureSpec(0, 0, lp.width);
		int height = 0;
		int tempHeight = lp.height;
		if(tempHeight < 0){
			height = MeasureSpec.makeMeasureSpec(tempHeight, MeasureSpec.EXACTLY);
		} else {
			height = MeasureSpec.makeMeasureSpec(tempHeight, MeasureSpec.UNSPECIFIED);
		}

		view.measure(width, height);

	}


设置HeadeView的顶部padding

/**
	 * 设置顶部布局的顶部padding
	 * @param topPadding
	 */
	public void topPadding(int topPadding) {
		header.setPadding(header.getPaddingLeft(), topPadding, 
				header.getPaddingRight(), header.getPaddingBottom());
		header.invalidate();
	}


\

\

\

\

\

\

\

\

\

\

\

\

\

自定义ListView:

package com.imooc.listviewfrashdemo1;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.widget.ArrayAdapter;

import com.example.listviewfrashdemo1.R;
import com.imooc.listviewfrashdemo1.MyFlashListView.ILoadListener;

public class MyFlushActivity extends Activity  implements ILoadListener{
	MyFlashListView mlv;
	ArrayAdapter<String> adapter;
	List<String> datas = new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.my_acitivity_main);
		
		initData();
		
		initView();
	}
	/**
	 * 初始化
	 */
	public void initView() {
		mlv = (MyFlashListView) findViewById(R.id.mlv);
		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
		mlv.setAdapter(adapter);
		
	}
	
	public void initData(){
		for (int i = 0; i < 20; i++) {
			datas.add("更新项目"+datas.size());
		}
	}
	@Override
	public void onLoad() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				mlv.doComplete();
			}
		}, 1000);
		initData();
	}
	
	
	
}


MyFlushActivity.java

package com.imooc.listviewfrashdemo1;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.widget.ArrayAdapter;

import com.example.listviewfrashdemo1.R;
import com.imooc.listviewfrashdemo1.MyFlashListView.ILoadListener;

public class MyFlushActivity extends Activity  implements ILoadListener{
	MyFlashListView mlv;
	ArrayAdapter<String> adapter;
	List<String> datas = new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.my_acitivity_main);
		
		initData();
		
		initView();
	}
	/**
	 * 初始化
	 */
	public void initView() {
		mlv = (MyFlashListView) findViewById(R.id.mlv);
		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
		mlv.setAdapter(adapter);
		
	}
	
	public void initData(){
		for (int i = 0; i < 20; i++) {
			datas.add("更新项目"+datas.size());
		}
	}
	@Override
	public void onLoad() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				mlv.doComplete();
			}
		}, 1000);
		initData();
	}
	
	
	
}


\

\

\

\

\

\

\

\

\