XDgaozhan 2013-07-10
最近要做一个下拉刷新的功能,网上找了很多例子,也看了一些开源的下拉刷新项目,但是小例子比较简单,效果和稳定性都差强人意,而开源的项目又太庞大,看起来耗时费劲,所以只好综合一下各处的代码掌握其原理,自己实现一套下拉刷新功能。
该控件特点:
1.子控件必须是一个ScrollView或ListView;
2.支持自定义下拉布局;
3.自定义下拉布局可以不用处理下拉的各种状态(只需要实现几个接口即可),也可以自己处理各种下拉的状态。
先来看看效果图:
上代码:
首先看如何使用:
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; } }