本文实例讲述了Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法。分享给大家供大家参考,具体如下:
前看过网易云阅读客户端,里面的文章可以实现上下拉动实现上下翻页的效果,感觉体验效果很不错。
公司新版本项目的开发中也要求实现类似的效果,不过还好项目需求里面可以提前知道需要实现上下拉动翻页的总的页数。如果像网易那种不提前知道总的页数感觉控制好LinearLayout里面的childView应该也可以达到效果。
好记性不如烂笔头,先写下我提前知道总页数实现上下拉翻页的问题吧!
首先布局仅仅是一个简单的LinearLayout包裹着
& lt; LinearLayout android: layout_width="宽和" android: layout_height="宽和" android: id=癅 + id/fenleiPullContentLayout” 面向android:=按怪薄北? & lt;/LinearLayout> >之前然后通过一个为循环把PullRefreshView包裹进来
pullContentLayout.removeAllViews (); pullViews.clear (); for (int i=0; i< leftEntityData.size();我+ +){ PullToRefreshProView pullview=(PullToRefreshProView) inflater.inflate(出来。fenleipro_item, null); LayoutParams参数=new LayoutParams (LayoutParams。MATCH_PARENT scrollHeight); pullview.setLayoutParams(参数); LinearLayout pullayout=(LinearLayout) pullview.findViewById (R.id.fenleirightlayout); RightAdapter适配器=new RightAdapter (rightEntityList.get(我)); pullayout.removeAllViews (); (int k=0; k< adapter.getCount (); k + +) { 视图视图=适配器。getView (k,零,零); pullayout.addView(视图中,k); } pullViews.add (pullview); pullContentLayout。addView (pullview,我); 如果(i==0) { pullview.setHeaderRefresh(假); pullview。setOnFooterRefreshListener(新MyOnRefreshListener (i)); }else if (i==leftEntityData.size () 1) { pullview.setFooterRefresh(假); pullview。setOnHeaderRefreshListener(新MyOnRefreshListener (i)); 其他}{ pullview。setOnHeaderRefreshListener(新MyOnRefreshListener (i)); pullview。setOnFooterRefreshListener(新MyOnRefreshListener (i)); } } >之前代码说明下:这里的PullToRefreshProView就是一个开源的下拉刷新控件,继承的是一个LinearLayout实现的。网上有源码,然后RightAdapter是一个BaseAdapter,通过这个适配器的getview得到每个观点,然后把视图添加到增压泵出的PullToRefreshProView的子Linearlayoyut里面。然后给每个PullToRefreshProView设置上啦下拉的回调接口,第一个没有上啦,最后个没下拉。这里的MyOnRefreshListener是自己定义的下拉接口
私人类MyOnRefreshListener实现> 公开课PullToRefreshUpAnimation扩展了动画{ 预展view1 view2; 私人int解决; 私人int topMarginView1=0; 公共PullToRefreshUpAnimation (v1上下文语境,视图,视图v2, int, int) { 超级(); view1=v1; view2=v2; 解决=? topMarginView1=view1.getMeasuredHeight (); setDuration (450); setFillAfter(真正的); setInterpolator(新DecelerateInterpolator ()); } 公共PullToRefreshUpAnimation(上下文语境,AttributeSet attrs) { 超级(上下文,attrs);//TODO自动生成构造函数存根 setDuration (450); setFillAfter(真正的); setInterpolator(新DecelerateInterpolator ()); } @Override 保护无效applyTransformation(浮动interpolatedTime变换t) { android.widget.LinearLayout。LayoutParams参数=(android.widget.LinearLayout.LayoutParams) view2.getLayoutParams (); 参数。页面顶栏=(int) (interpolatedTime *解决); 参数。身高=Math.abs(解决); android.widget.LinearLayout。LayoutParams param1=(android.widget.LinearLayout.LayoutParams) view1.getLayoutParams (); param1。页面顶栏=(int) (topMarginView1 * (interpolatedTime-1)); param1。身高=topMarginView1; view1.setLayoutParams (param1); view2.setLayoutParams(参数); } @Override 公共布尔willChangeBounds () {//TODO自动生成方法存根 返回true; } } >之前下拉动画
公开课PullToRefreshAnimation扩展了动画{ 私人视图视图; 私人int解决; 公共PullToRefreshAnimation(上下文语境,v, int, int) { 超级(); 视图=v; 解决=? setDuration (450); setFillAfter(真正的); setInterpolator(新DecelerateInterpolator ()); } 公共PullToRefreshAnimation(上下文语境,AttributeSet attrs) { 超级(上下文,attrs);//TODO自动生成构造函数存根 setDuration (450); setFillAfter(真正的); setInterpolator(新DecelerateInterpolator ()); } @Override 保护无效applyTransformation(浮动interpolatedTime变换t) { android.widget.LinearLayout。LayoutParams参数=(android.widget.LinearLayout.LayoutParams) view.getLayoutParams (); 参数。页面顶栏=(int) (interpolatedTime *解决); 参数。身高=Math.abs(解决); 参数。宽度=android.widget.LinearLayout.LayoutParams.MATCH_PARENT; view.setLayoutParams(参数); } @Override 公共布尔willChangeBounds () {//TODO自动生成方法存根 返回true; } }Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法