【Android(安卓)UI】具有弹性的ListView
16lz
2021-01-26
要实现的效果就是,滑动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>
更多相关文章
- Button:去阴影
- YUV420转RGB的代码(C++/JAVA)
- Android(安卓)开机自动启动服务
- android view滑动的几种方法
- Android(安卓)listview指定垂直滑动距离
- Paint---PathEffect(路径效果)
- android之Can't create handler inside thread that has not cal
- android 客户端数据传递之一:Web Service 代码
- android 弹性ScrollView(已优化)