【Android UI】具有弹性的ListView
2016-05-03 11:20
393 查看
要实现的效果就是,滑动ListView到顶部或者底部时会继续向上或者向下滑动一段距离。
效果如下:
通过查看ListView源码,ListView中有一个控制滑动到边缘的处理方法,如下所示:
这里面的maxOverScrollY参数就可以实现我们要实现的效果了,其默认值是0,也就是没有弹性效果。
我们可以自定义一个ListView重写overScrollBy方法,修改maxOverScrollY的值,这样就实现了弹性效果。
自定义的ListView代码如下:
FlexibleListViewTest文件代码:
flexible.xml文件代码:
效果如下:
通过查看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>
相关文章推荐
- ios上 更改 状态栏(UIStatusBar)的颜色
- 使用NSOperation以及NSOperationQueue
- UIView的autoresizingMask属性的研究
- UIBezierPath精讲
- Unknown table ‘system_sequences’ in information_schema错误解决
- leetcode 347. Top K Frequent Elements
- NSDictionary中取出value的值赋给float型
- FluentData -Micro ORM with a fluent API that makes it simple to query a database
- android学习笔记---UI布局
- UIView 中常见的方法总结
- 【Android UI】自动显示、隐藏布局的ListView
- Null value was assigned to a property of primitive type setter of
- vue.js-step-everthing-3
- 浅谈requireJS
- [LeetCode] Top K Frequent Elements 前K个高频元素
- VirtualBox导入已存在的VHD遇到的uuid冲突问题
- UIScrollView 和UIPageControl 实现app启动滑动图
- UIImage常用属性和方法
- STL之优先队列priority_queue
- UI界面结构