安卓弹性刷新通用版—支持任何view上下刷新均有弹性效果

做安卓开发的朋友们,不知道你们会不会经常用遇到这样的情景,某个做所畏的产品设计的sb,拿着iphone来看给你看,说看苹果的这个效果多好,看那个效果多好。苹果也比安卓清晰多了,你能不能也把咱们的安卓应用也做成这种效果的。那样的用户体验更好,更cool一些。不知你们有没有遇到过这样半吊子的sb设计,反正我是遇到了。所以本文由此而生。

进入正题:首先你要实现弹性效果的view要能确定什么时候应该出现下拉的效果,什么时候出现下推的效果。在代码里的体现就是你要实现IScrollOverable接口。本文中的例子就拿GridView来做个例子。

无图无真相:

  

实现了IScrollOverable接口的GridView:

 

public  class  BshSOGridView extends  GridView implements
                 IScrollOverable
{
         public  BshSOGridView(Context context, AttributeSet attrs,
                         int  defStyle)
         {
                super ( context, attrs, defStyle );
        }
 
          public  BshSOGridView(Context context, AttributeSet attrs)
         {
                 super ( context, attrs );
         }
          public  BshSOGridView(Context context)
       {
                 super ( context );
       }
          @Override
         public  boolean  isScrollOnTop()
         {
               return  0  == getFirstVisiblePosition() ? true  : false ;
         }
         @Override
         public  boolean  isScrollOnBtm()
         {
                 return  (getCount() - 1 ) == getLastVisiblePosition() ? true  : false ;
         }
}

调用Activity:

public  class  BshSOViewActivity extends  Activity {
 
         BshElasticView ev;
       BshSOGridView gv;
         GridAdagper ga = new  GridAdagper();
         @Override
         public  void  onCreate(Bundle savedInstanceState)
         {
                 super .onCreate( savedInstanceState );
                 setContentView( R.layout.elastic_grid );
                 ev = ( BshElasticView ) findViewById( R.id.ev );
                 //拉动幅度
                 ev.setFactor( 2  );
                 //拉动范围
                 ev.setMaxElastic( 0 .9f );
                gv = new  BshSOGridView( this  );
                 gv.setBackgroundColor( Color.WHITE );
                 gv.setNumColumns( 4  );
                 gv.setAdapter( ga );
                 ev.setScrollOverable( gv );
                ev.irefresh = new  IRefresh()
                 {
                         @Override
                         public  boolean  refreshTop()
                         {
                                 new  Thread( new  Runnable()
                                 {
                                        @Override
                                         public  void  run()
                                         {
                                                 try
                                                 {
                                                        Log.d( "bsh" , "refreshing"  );
                                                         //在这里做刷新操作读数据神马的。这里用睡觉代替
                                                        Thread.sleep( 3000  );
                                                  } catch  ( InterruptedException e )
                                                 {
                                                         e.printStackTrace();
                                                 }
                                                 ev.onRefreshComplete();
                                         }
                                 } ).start();
                                 return  false ;
                         }
                          @Override
                         public  boolean  refreshBtm()
                        {
                                 new  Thread( new  Runnable()
                                 {
                                         @Override
                                         public  void  run()
                                         {
                                                try
                                                 {
                                                        Log.d( "bsh" , "refreshing"  );
                                                         Thread.sleep( 3000  );
                                                 } catch  ( InterruptedException e )
                                                 {
                                                        e.printStackTrace();
                                                }
                                                 ev.onRefreshComplete();
                                         }
                                 } ).start();
                                return  false ;
                         }
                 };
         }
          class  GridAdagper extends  BaseAdapter
         {
                 @Override <br>                public  int  getCount()
                 {    <br>                    return  100 ;
                 }
                 @Override
                public  Object getItem( int  arg0)
                 {
                         return  null ;
                 }
                 @Override
                 public  long  getItemId( int  arg0)
                 {
                         return  0 ;
                 }
                  @Override
                 public  View getView( int  arg0, View arg1, ViewGroup arg2)
                 {
                         if  ( null  == arg1 )
                         {
                                arg1 = new  ImageView( BshSOViewActivity. this  );
                                 arg1.setBackgroundResource( R.drawable.ic_launcher );
                         }
                         return  arg1;
                 }
         }
}

转载自:http://www.cnblogs.com/vus520/archive/2012/06/06/2561988.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值