要实现的效果就是,滑动ListView到顶部或者底部时会继续向上或者向下滑动一段距离。

效果如下:

通过查看ListView源码,ListView中有一个控制滑动到边缘的处理方法,如下所示:

protected boolean overScrollBy(int deltaX, int deltaY,                                   int scrollX, int scrollY,                                   int scrollRangeX, int scrollRangeY,                                   int maxOverScrollX, int maxOverScrollY,                                   boolean isTouchEvent)

这里面的maxOverScrollY参数就可以实现我们要实现的效果了,其默认值是0,也就是没有弹性效果。
我们可以自定义一个ListView重写overScrollBy方法,修改maxOverScrollY的值,这样就实现了弹性效果。

自定义的ListView代码如下:

package com.yzx.mylistview;import android.content.Context;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.widget.ListView;/** * Created by yzx on 2016/5/2. */public class FlexibleListView extends ListView {    private static int mMaxOverDistance = 50;    private Context mContext;    public FlexibleListView(Context context) {        super(context);        this.mContext = context;        initView();    }    public FlexibleListView(Context context, AttributeSet attrs) {        super(context, attrs);        this.mContext = context;        initView();    }    public FlexibleListView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.mContext = context;        initView();    }    private void initView(){        DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();        float density = metrics.density;        mMaxOverDistance = (int) (mMaxOverDistance*density);    }    @Override    protected boolean overScrollBy(int deltaX, int deltaY,                                   int scrollX, int scrollY,                                   int scrollRangeX, int scrollRangeY,                                   int maxOverScrollX, int maxOverScrollY,                                   boolean isTouchEvent) {        return super.overScrollBy(deltaX, deltaY,                scrollX, scrollY,                scrollRangeX, scrollRangeY,                maxOverScrollX, mMaxOverDistance,                isTouchEvent);    }}

FlexibleListViewTest文件代码:

package com.yzx.mylistview;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;/** * Created by yzx on 2016/5/2. */public class FlexibleListViewTest extends Activity {    private FlexibleListView mFlexibleListView;    private String[] data = new String[30];    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.flexible);        for (int i=0; i<30; i++) {            data[i] = ""+i;        }        mFlexibleListView = (FlexibleListView) findViewById(R.id.flexible_listview);        mFlexibleListView.setAdapter(new ArrayAdapter<String>(this,                android.R.layout.simple_list_item_1,                data));    }}

flexible.xml文件代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">    <com.yzx.mylistview.FlexibleListView  android:id="@+id/flexible_listview" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>

更多相关文章

  1. Button:去阴影
  2. YUV420转RGB的代码(C++/JAVA)
  3. Android(安卓)开机自动启动服务
  4. android view滑动的几种方法
  5. Android(安卓)listview指定垂直滑动距离
  6. Paint---PathEffect(路径效果)
  7. android之Can't create handler inside thread that has not cal
  8. android 客户端数据传递之一:Web Service 代码
  9. android 弹性ScrollView(已优化)

随机推荐

  1. Android--WindowManager.LayoutParams(上
  2. android 获取网络上服务器图片
  3. Android(安卓)Studio3.0 Error:Execution
  4. android 模拟滑动事件
  5. android 记得用mkdirs不要用mkdir
  6. Android实现图片缩放示例
  7. Android(安卓)-- EditText插入表情
  8. android如何禁止安装第三方应用
  9. Android之Audio常用属性变量
  10. Android(安卓)Service分析