• 安卓弹性刷新通用版—支持任何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
    public int getCount() {
    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; } } }

    源码下载

     

  • 相关阅读:
    linux下Tomcat配置提示权限不够解决办法
    Linux 生成SSL证书 供 nginx使用
    mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】
    Linux Mysql 备份与还原
    Linux 安装Mysql
    Linux 卸载Mysql
    Linux yum安装java环境
    InMemoryUploadedFile对象复制到磁盘中的临时路径
    在django中使用(配置)celery
    使用ffmpeg以mp4的格式保存视频
  • 原文地址:https://www.cnblogs.com/vus520/p/2561988.html
Copyright © 2020-2023  润新知