基于XListView的基础上,把它的头部刷新换成自己定义的控件,这与iOS版上的QQ刷新类似。效果如下:
水滴效果可以看我的上一篇博客
水滴效果实现
一、代码
由于这是基于XListView 的,所以大部分代码就不贴了,只是把头部的headerview代码修改。
1、通过改变控件的高度来实现动态效果。这部分是在XListView 上实现。
xlistview_waterEffect.getLayoutParams().height = height;
xlistview_waterEffect.requestLayout();
public void setVisiableHeight(int height) { if (height < 0) { height = 0; } LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer .getLayoutParams(); lp.height = height; mContainer.setLayoutParams(lp); if (height > dip2px(getContext(), 120)) { height = dip2px(getContext(), 120); } xlistview_header_content.getLayoutParams().height = height; xlistview_header_content.requestLayout(); xlistview_waterEffect.getLayoutParams().height = height; xlistview_waterEffect.requestLayout(); }
2、使用方式。
(1)在布局的引用
<xlistview.XListView android:id="@+id/xlistview" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#ffffff"/>
(2) 在activity中使用
private void initData(){ testData = new ArrayList<String>(); refreshData(); xlistview.setPullLoadEnable(true); arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, testData); xlistview.setAdapter(arrayAdapter); xlistview.setXListViewListener(new IXListViewListener() { @Override public void onRefresh() { handler.sendEmptyMessageDelayed(0, 1000); } @Override public void onLoadMore() { handler.sendEmptyMessageDelayed(1, 1000); } }); } Handler handler = new Handler(){ public void dispatchMessage(android.os.Message msg) { switch(msg.what){ case 0: refreshData(); arrayAdapter.notifyDataSetChanged(); break; case 1: loadData(); break; } stopXlistView(); }; }; private void refreshData(){ testData.clear(); for(int i=0;i<10;i++){ testData.add("测试=="+i); } } private void loadData(){ for(int i=0;i<10;i++){ testData.add("load===="+i); } arrayAdapter.notifyDataSetChanged(); } private void stopXlistView(){ xlistview.stopRefresh(); xlistview.stopLoadMore(); }
3、修改控件属性
(1)在XListView 代码中修改下拉的高度。
height > dip2px(getContext(), 120),其中在这里设置它的高度为120dp.
public void setVisiableHeight(int height) { if (height < 0) { height = 0; } LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer .getLayoutParams(); lp.height = height; mContainer.setLayoutParams(lp); if (height > dip2px(getContext(), 120)) { height = dip2px(getContext(), 120); } xlistview_header_content.getLayoutParams().height = height; xlistview_header_content.requestLayout(); xlistview_waterEffect.getLayoutParams().height = height; xlistview_waterEffect.requestLayout(); }
(2)修改头部圆形的大小。
直接在WaterEffect.Java中修改
private float bigRadius = 18;// 大圆半径 private float smallRadius = 12;// 小圆半径
(3)修改头部、底部圆形进度条的类型。
分别在xlistview_header.xml、xlistview_footer.xml,中把ProgressBar控件替换即可。
二、总结
关键是水滴效果的实现,这个刷新效果我是基于XListView 来修改的,水滴效果可以参考我上一篇博客。这和QQ的不是完全一样的。
具体代码也上传了。
源码
作者:LHavoc