ListView等滚动位置经常不符合用户期望:
很多时候都是看完一页想滑到下一页,但滑动一次距离往往不是不够就是超过,很难控制。
PagedListView工程中提供了PageScoller来解决这个问题。
使用PageScoller可以在 中低速滑动 后会滚动一页,很慢滑动 或 很快滑动 则按默认处理。
使用方法如下:
1.初始化PageScoller
pageScoller = new PageScoller(listView); pageScoller.init();
2.重写dispatchTouchEvent方法
在Activity的dispatchTouchEvent方法内 pageScoller.dispatchTouchEvent(ev); 具体如下:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { pageScoller.dispatchTouchEvent(ev); return super.dispatchTouchEvent(ev); }
工程中还提供了几个Demo,比如ListViewActivity
1 package zuo.biao.pagedlistview; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.view.MotionEvent; 9 import android.widget.ArrayAdapter; 10 import android.widget.ListView; 11 12 /**ListView示例 13 * @author Lemon 14 */ 15 public class ListViewActivity extends Activity { 16 17 private ListView lvListView; 18 private List<String> list; 19 private PageScoller pageScoller; 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.list_view_activity); 24 25 lvListView = (ListView) findViewById(R.id.lvListView); 26 27 list = new ArrayList<String>(); 28 for (int i = 0; i < 100; i++) { 29 list.add("Item" + i); 30 } 31 32 lvListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)); 33 34 pageScoller = new PageScoller(lvListView); 35 pageScoller.init(); 36 } 37 38 /** 39 * Fragment中没有这个方法,可在Fragment内新建dispatchTouchEvent方法, 40 * 然后在添加Fragment的Activity中重写dispatchTouchEvent方法,并在该方法内调用Fragment里的dispatchTouchEvent方法, 41 * 即fragment.dispatchTouchEvent(ev); 42 */ 43 @Override 44 public boolean dispatchTouchEvent(MotionEvent ev) { 45 pageScoller.dispatchTouchEvent(ev); 46 return super.dispatchTouchEvent(ev); 47 } 48 49 }
下载地址(欢迎Star,欢迎Fork)
?https://github.com/TommyLemon/PagedListView
下载试用
时间: 2024-10-17 15:19:42