ViewPager配合android:clipChildren属性来实现画廊效果

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-8-31 11:51:42
Tag:background android version false 图片

项目介绍:

本文章主要介绍使用ViewPager配合android:clipChildren属性来实现画廊效果,网络请求用了Retrofit2,Api使用的是豆瓣开放Api,图片加载使用的是Glide,具体实现效果见图片。

clipChildren属性:clipChild用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,clipChild被设置为true,不允许进行扩展绘制。所以我们要实现画廊效果就要设置该属性为false。
1、 xml布局代码
[XML] 查看源文件 复制代码

  
  
  • 可以看到LinearLayout的android:clipChildren设置为了false。注意要实现图片中的效果,ViewPager的宽度是不能设为match_parent的,ViewPager宽度与卡片的宽度设置一致即可,我这里给的是250dp。
2 、java代码
  • 要实现上述卡片缩半透明的效果,还需要用到一个类,ZoomOutPageTransformer,网上有这个类的源码分析,有兴趣的可以去搜索了解下,这里就不贴出来了。
  • ViewPager初始化代码
    [Java] 查看源文件 复制代码
      ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);    
      adapter = new PageAdapter(MainActivity.this, list);  
      viewPager.setOffscreenPageLimit(5);    
      viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
  • Retrofit2 配置类ApiModule,这里只贴主要的方法,如需了解更多,请查看源码。以下方法用于生成Api请求实例,使用了单例模式,避免频繁创建对象,节约资源,提高性能。
    [Java] 查看源文件 复制代码
    public static  T of(Class sClass) { 
     if (apiModule.containsKey(sClass)) {  
        return (T) apiModule.get(sClass);
      }  
     Retrofit retrofit = builder.client(httpClient).build(); 
     T t = retrofit.create(sClass); 
     apiModule.put(sClass, t);   
     return t;
    }

  • 获取Api请求对象
    [Java] 查看源文件 复制代码
    DouBanService  douBanService = ApiModule.of(DouBanService.class);
  • 网络请求代码。这里用到了一个吃豆豆的Loading,用于网络加载提示,很可爱啊有木有:-D,控件来自第三方开源库,提供了很多样式的Loading可以选择 传送门
    [Java] 查看源文件 复制代码
    /** * 获取豆瓣Api数据 */
    private void LoadData() { 
     loaddingDialog.show();    
     douBanService.getRepoData("20").enqueue(new Callback>() {
          @Override        
          public void onResponse(Call> call, Response> response) {
              Log.e("onResponse", response.body().toString()); 
              list.addAll(response.body().getList());   
              viewPager.setAdapter(adapter);    
              loaddingDialog.cancel();       
      }       
         @Override        
         public void onFailure(Call> call, Throwable t) {
              Log.e("Throwable", t.getMessage());    
             loaddingDialog.cancel();       
     }});}

3、总结:android永远都比我想象的深,很多东西都需要我们去挖掘。

相关源码推荐:

我来说两句
所有评论(139)
xingliangzheng 2016-9-29 13:57:29
我只是路过打酱油的。
回复
贰是种态度 2016-9-29 14:07:44
感谢分享,安卓巴士有你更精彩:)
回复
1191860939 2016-9-30 13:29:02
我只是路过打酱油的。
回复
Tboss 2016-10-3 23:14:00
精华内容,楼主V5!
回复
醉天空 2016-10-9 11:22:35
很给力,安卓巴士有你更精彩!
回复
Lyunfei 2016-10-10 10:13:42
强烈支持楼主ing……
回复
cxq7899091 2016-10-10 15:16:54
我只是路过打酱油的。
回复
ququzt 2016-10-11 09:56:57
我只是路过打酱油的。
回复
提取码:  下载次数:88 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:初级码农 
6758 0 88
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿
帖子代码编辑/版权问题
QQ:435399051,1294855032
如何获得代码达人称号?
如何成为签约作者?
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )