方便实用的下拉刷新控件,支持ScrollView、AbsListView

最近要做一个下拉刷新的功能,网上找了很多例子,也看了一些开源的下拉刷新项目,但是小例子比较简单,效果和稳定性都差强人意,而开源的项目又太庞大,看起来耗时费劲,所以只好综合一下各处的代码掌握其原理,自己实现一套下拉刷新功能。

该控件特点:

1.子控件必须是一个ScrollView或ListView;

2.支持自定义下拉布局;

3.自定义下拉布局可以不用处理下拉的各种状态(只需要实现几个接口即可),也可以自己处理各种下拉的状态。

先来看看效果图:


方便实用的下拉刷新控件,支持ScrollView、AbsListView
 


方便实用的下拉刷新控件,支持ScrollView、AbsListView
 


方便实用的下拉刷新控件,支持ScrollView、AbsListView
 

上代码:

首先看如何使用:

1.使用的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.example.pulldown.PullDownScrollView
        android:id="@+id/refresh_root"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:background="#161616"
        android:orientation="vertical" >

        <ScrollView
            android:id="@+id/scrollview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none" >

            <LinearLayout
                android:id="@+id/mainView"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#1f1f1f"
                android:orientation="vertical" >

                <!-- 自已的布局 -->

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dip"
                    android:gravity="center"
                    android:text="@string/hello_world"
                    android:textColor="@android:color/white"
                    android:textSize="18sp" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dip"
                    android:gravity="center"
                    android:text="@string/hello_world"
                    android:textColor="@android:color/white"
                    android:textSize="18sp" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dip"
                    android:gravity="center"
                    android:text="@string/hello_world"
                    android:textColor="@android:color/white"
                    android:textSize="18sp" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dip"
                    android:gravity="center"
                    android:text="@string/hello_world"
                    android:textColor="@android:color/white"
                    android:textSize="18sp" />
            </LinearLayout>
        </ScrollView>
    </com.example.pulldown.PullDownScrollView>

</LinearLayout>

 2.UI使用:

   首先,Activity实现接口:

implements RefreshListener

 部分代码如下:

package com.example.pulldown;

import com.example.pulldown.PullDownScrollView.RefreshListener;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity implements RefreshListener{
    private PullDownScrollView mPullDownScrollView; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mPullDownScrollView = (PullDownScrollView) findViewById(R.id.refresh_root);  
        mPullDownScrollView.setRefreshListener(this);  
        mPullDownScrollView.setPullDownElastic(new PullDownElasticImp(this));  
    }
    @Override  
    public void onRefresh(PullDownScrollView view) {  
        new Handler().postDelayed(new Runnable() {  
              
            @Override  
            public void run() {  
                // TODO Auto-generated method stub  
                mPullDownScrollView.finishRefresh("上次刷新时间:12:23");  
            }  
        }, 2000);  
    }  
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
 

相关推荐