实现ListView上拉/下拉刷新的例子
来源:互联网 发布:安卓开发 大数据存综 编辑:程序博客网 时间:2024/05/22 12:51
1. MainActivity.java
package com.habby.sliderbar;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import com.habby.sliderbar.SpringListView.SpringListener;public class MainActivity extends Activity implements OnClickListener {private final String TAG = getClass().getSimpleName();private SpringListView mListView = null;private SpringListener mSpringListener = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}@Overridepublic void onClick(View view) {switch (view.getId()) {default:break;}}private void initView() {mListView = (SpringListView) findViewById(R.id.name_lv);List<String> datas = new ArrayList<String>();for (int i = 0; i < 25; ++i) {datas.add("fuck you");}ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);mListView.setAdapter(adapter);mSpringListener = new SpringListener() {@Overridepublic void onSpringUpPush() {Log.e(TAG, "UpPush !");}@Overridepublic void onSpringDownPush() {Log.e(TAG, "DownPush");}@Overridepublic void onSpringCompleted() {Log.e(TAG, "Completed !");}};mListView.registerSpringListener(mSpringListener);}}2. SpringListView.java 自定义控件
package com.habby.sliderbar;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ListView;/** * 针对一个带上拉/下拉弹簧效果的ListView,比普通的ListView仅仅多了弹簧效果而已; * 因此,可以重写ListView,添加弹簧效果即可,其他的行为依旧是默认的ListView行为。 * 子线程用于处理 “弹回” 效果。 * @author habby * */public class SpringListView extends ListView implements Runnable {private float mLastDownY = 0f;private int mDistance = 0;// 手指/弹簧拉去移动的距离private int mStep = 10;private boolean mPositive = false; // 滚动方向private SpringListener mListener;public SpringListView(Context ctx, AttributeSet attrs) {super(ctx, attrs);}public SpringListView(Context ctx, AttributeSet attrs, int defStyle) {super(ctx, attrs, defStyle);}public SpringListView(Context ctx) {super(ctx);}/** * 只有满足这个情况才会有下拉弹簧: * 当按下时,ListView可以显示的第1行是处于顶部第1个或底部最后1个时,下拉或上拉才有弹簧效果。 */@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:if (getFirstVisiblePosition() == 0 || getLastVisiblePosition() == getCount() - 1) {mLastDownY = event.getY();return true;}mDistance = 0;break;case MotionEvent.ACTION_MOVE:// 拉伸mDistance = (int) (mLastDownY - event.getY());if ((mDistance < 0 && (getFirstVisiblePosition() == 0)) || (mDistance > 0 && (getLastVisiblePosition() == getCount() - 1))) {mDistance /= 2;scrollTo(0, mDistance);if (mListener != null) {if (mDistance < 0) {mListener.onSpringDownPush();} else if (mDistance > 0) {mListener.onSpringUpPush();}}return true;}mDistance = 0;break;case MotionEvent.ACTION_UP:// 松手的时候,弹回来if ((mDistance < 0 && getFirstVisiblePosition() == 0) || (mDistance > 0 && getLastVisiblePosition() == getCount() - 1)) {mStep = 1;mPositive = (mDistance >= 0);this.post(this);// 启动子线程,用于 "弹回" 效果return true;}mDistance = 0;break;default:break;}// 其他情况使用ListView(父类)本身的行为,不覆盖。这里仅仅是覆盖了ListView以上的2中情况。return super.onTouchEvent(event);}@Overridepublic void run() {mDistance += mDistance > 0 ? -mStep : mStep;scrollTo(0, mDistance);if ((mPositive && mDistance <= 0) || (!mPositive && mDistance >= 0)) {scrollTo(0, 0);mDistance = 0;mLastDownY = 0f;if (mListener != null) {mListener.onSpringCompleted();}return;}mStep += 5;this.postDelayed(this, 10);}public void registerSpringListener(SpringListener listener) {mListener = listener;}/** * 回调接口 */public interface SpringListener {public void onSpringDownPush();// 下拉public void onSpringUpPush();// 上拉public void onSpringCompleted();//"回弹" 完成}}3. activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" > <com.habby.sliderbar.SpringListView android:id="@+id/name_lv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" /></RelativeLayout>
- 实现ListView上拉/下拉刷新的例子
- Android ListView下拉刷新上拉加载更多的实现
- listview下拉刷新,上拉加载更多的实现方法
- Android实现ListView的下拉刷新、上拉加载更多
- 通过SwipeRefreshLayout实现ListView的上拉加载下拉刷新
- ListView下拉刷新上拉加载的实现与使用
- ListView下拉刷新和上拉加载更多的实现
- 实现ListView的下拉刷新和上拉加载
- 实现ListView的上拉刷新和下拉加载
- 下拉刷新+上拉加载的listview
- listview的上拉刷新,下拉加载
- listview的上拉加载,下拉刷新
- listview 上拉 下拉刷新
- 使用下拉刷新的和上拉刷新的ListView
- listview 带轮播的上拉刷新下拉刷新
- listview 带轮播的上拉刷新下拉刷新
- ListView (4)滚动事件/上拉刷新/下拉刷新的实现
- 使用安卓自带刷新控件实现ListView的上拉加载和下拉刷新
- spring中context:property-placeholder/元素 --spring 属性文件
- HDU1083,PKU1469,ZJU1140
- 自学linux的几本书
- Java深克隆 浅克隆 例子
- 【C 语言菜鸟之旅】1.5.1将输入复制到输出
- 实现ListView上拉/下拉刷新的例子
- 中国余数定理:HDU1370
- hdu-2100-Lovekey
- 线段树:HDU4217
- 度量相似度方法总结
- 1059. Prime Factors (25)
- 5、面向接口_业务模型分析实例3
- hdu 4771 Stealing Harry Potter's Precious
- 源码分析必备:用vld查看opcode信息