带吸附效果的ViewPager(二)
上篇实现了一个简单的吸附效果,那么这篇我们来实现上篇中所示的360软件详情页(带viewpager)的效果!先来参观下本篇所实现的效果图:
了解了上一篇的实现过程,那么本篇的效果无非是修改一下布局,将原来的列表位置换上viewpager,snapbar换上RadioGroup不久可以了吗?确实如此!只是在初始化viewpager时相对麻烦点,因为数据是要动态添加的,有同学可能问viewpager里的列表如何实现?用listview吗?理论是上可以得,但是我们知道ScrollView嵌套listview时的效率,所以还是不要这样干了!最好的办法就是在viewpager的item中动态添加列表view:
views = new ArrayList<>();
for (int i = 0; i < 3; i++) {
View view = mInflater.inflate(R.layout.vp_item, null);
LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll);
for (int j = 0; j < 20; j++) {
ll.addView(getView(i));
}
views.add(view);
}
myAdapter = new MyAdapter();
vp.setAdapter(myAdapter);
/**
* 填充viewpager的itmeview
*
* @return
*/
private View getView(int i) {
View view = mInflater.inflate(R.layout.list_item, null);
//填充数据//
TextView tv_title= (TextView) view.findViewById(R.id.tv_title);
tv_title.setText("标题"+(i+1));
return view;
}
操作简单,又保证效率!当然,本例中的列表条数是固定的,如果我们还需要加载更多怎么办?只需在底部再添加一个加载更多的按钮,给予点击事件就可以了!
好了,貌似就这么简单,完事了?……还差一点!
只是上面这部分内容,运行程序后,发现ScrollView无法滑动了,那么目前有两种解决办法:
第一,将viewpager的高度固定——不科学;
第二,重写viewpager,动态计算高度——靠谱;
重写的viewpager:
package com.byl.snappingviewpager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by baiyuliang on 2016-5-5.
*/
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if (h > height)
height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
好了,就这么简单!
ASdemo下载地址:http://download.csdn.net/detail/baiyuliang2013/9510729
PS:随着安卓SDK的不断升级,现在这种效果可以直接用SDK自带方法即可实现啦~CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+TabLayout,
而博客中的方法仅供参考吧~
带吸附效果的ViewPager(二)的更多相关文章
- 带吸附效果的ViewPager(一)
什么叫吸附效果?先看一个示例更为直观,借用网上的一个效果图: 类似这种效果的app很多,网上的实现方法也是很多,但各种重写各种监听又令人不胜其烦,今日突发奇想,顺着自己的思路实现了类似的效果,不敢独享 ...
- android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...
- js+css实现带缓冲效果右键弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android利用温度传感器实现带动画效果的电子温度计
概述 Android利用温度传感器实现带动画效果的电子温度计. 详细 代码下载:http://www.demodashi.com/demo/10631.html 一.准备工作 需要准备一部带有温度传感 ...
- js简单 图片版时钟,带翻转效果
js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- jquery制作弹出层带遮罩效果,点击阴影部分层消失
jquery制作弹出层带遮罩效果,点击阴影部分层消失. 整体还是比较简单的. HTML代码很简单 <a href="#" class="big-link" ...
- 纯CSS3带动画效果导航菜单
随着互联网的发展,网页能表现的东西越来越多.由最开始单纯的文字和链接构成的网页,到后来的表格布局,再到div+css模式,现在发展到了html+css3.网页能表达的东西越来越多,css3兴起已经很多 ...
- 收藏一个带动画效果的ScrollViewer以及ScrollBar的模板
这里介绍一个带动画效果的ScrollViewer和ScrollBar,总共分为两个资源字典,直接拿来引用即可: 1 ScrollBarStyle.xaml <ResourceDictionary ...
随机推荐
- Gradle学习之构建java与web项目
一.使用Gradle的java插件构建Java项目 1)Gradle插件包含了若干个接口定义和已有的任务项,语法结构:apply plugin:'插件名' ,此处我们定义插件 apply plugin ...
- 使设备I/O的核心模块工作,有哪两种方式?
设备处理进程方式.文件操作方式.
- Python之作业购物车
作业之购物车优化 购物车优化要求如下: 用户入口: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就 ...
- SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库
SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库 1.1状况描述: 若SQL Server数据库的账号(这里以sa为例)密码发生了变更,那么连接数据的客户端vCe ...
- [ SSH框架 ] Hibernate框架学习之二
一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...
- 77. Combinations(medium, backtrack, 重要, 弄了1小时)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- jsp&servlet——session监听
session监听,需要实现HttpSessionAttributeListener接口 attributeAdded:监听添加session attributeRemoved:监听删除session ...
- linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties
Day12 IO 序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...
- webpack4新建一个项目
Create a new directory mkdir webpack-4-quickstart Initialize a package.json by running: npm init -y ...
- JavaScript switch 语句
switch 语句用于基于不同的条件来执行不同的动作. JavaScript switch 语句 请使用 switch 语句来选择要执行的多个代码块之一.你可以在JavaScript编程实战中了解怎么 ...