每天学一点AndroidUI——下拉刷新

来源:互联网 发布:网络上网行为监控 编辑:程序博客网 时间:2024/06/05 08:55

下拉刷新的功能已经很普遍了,开源的也很多,其原理只是重写listview 在顶部加一个自定义的布局!!监控事件来修改布局的padding

附上源码 简陋的是剩下原理,一看就明白

其中自定义布局的高度用代码获取而不是我这样的手写!!!

package com.toolbox.test;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.MotionEvent;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListView;import android.widget.RelativeLayout;public class PullListview extends ListView implements OnScrollListener { private LayoutInflater inflater; private RelativeLayout headerView; private boolean isRefreshable; private int startY;public PullListview(Context context) {super(context);// TODO Auto-generated constructor stubinit(context);}public PullListview(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stubinit(context);}public PullListview(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubinit(context);}public void init(Context context){ inflater = LayoutInflater.from(context);       headerView = (RelativeLayout) inflater.inflate(R.layout.activity_pulllistview, null);      headerView.setPadding(0, -20, 0, 0);     addHeaderView(headerView, null,false );     setOnScrollListener(this);}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stubSystem.out.println(firstVisibleItem);if (firstVisibleItem == 0) {          isRefreshable = true;       } else {          isRefreshable = false;       }  }@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stub}@Overridepublic boolean onTouchEvent(MotionEvent ev) {// TODO Auto-generated method stubif(isRefreshable){switch (ev.getAction()) {case MotionEvent.ACTION_DOWN: startY = (int) ev.getY(); System.out.println("down");break;case MotionEvent.ACTION_UP:System.out.println("up"); headerView.setPadding(0, 20, 0, 0);break;case MotionEvent.ACTION_MOVE:System.out.println("move"); int tempY = (int) ev.getY();   int tap=tempY-startY; headerView.setPadding(0, tap, 0, 0);             break;default:break;}}return super.onTouchEvent(ev);}}


0 0
原创粉丝点击