ViewPager 滑动页(二)
需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,并实现页面自动切换;
效果图:

实现分析:
1.目录结构:


代码实现:
1.PosterView.java
package com.jjc.demo; import java.util.ArrayList;
import java.util.List; import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout; public class PosterView extends FrameLayout{ private Context context;
private ViewPager viewPager;
private LinearLayout container; private PosterAdapter adapter; private List<Integer> posterList = new ArrayList<Integer>(); private ImageView imageView;
// 底部小点的图片
private ImageView[] points; // 记录当前选中位置
private int currentIndex = 0;
private int nextIndex;
private int pageNum = 1; private Handler handler = new Handler(Looper.getMainLooper()) { @Override
public void handleMessage(Message msg) {
if (points!= null && points.length >0) {
nextIndex = (currentIndex + 1) % points.length;
// 设置当前页面
setCurDot(nextIndex);
setCurView(nextIndex);
handler.removeMessages(0);
handler.sendEmptyMessageDelayed(0, 5000);
} }
}; public PosterView(Context context) {
this(context, null);
} public PosterView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
LayoutInflater.from(context).inflate(R.layout.view_poster, this, true);
initView();
} @Override
protected void onDetachedFromWindow(){
handler.removeMessages(0);
super.onDetachedFromWindow();
} private void initView(){
container = (LinearLayout) findViewById(R.id.container);
viewPager = (ViewPager)findViewById(R.id.viewpager);
viewPager.setOnPageChangeListener(new viewpagerListener()); adapter = new PosterAdapter(context, posterList);
viewPager.setAdapter(adapter); } /**
* 刷新海报页数据;
* @param list
*/
public void refreshData(List<Integer> list){
if(list == null || list.isEmpty()){
return;
}
initPoint(list.size()); posterList.clear();
posterList.addAll(list);
adapter.notifyDataSetChanged(); handler.removeMessages(0);
handler.sendEmptyMessageDelayed(0, 5000);
} private void initPoint(int num){
pageNum = num;
container.removeAllViews(); if(num == 0){
return;
} points = new ImageView[num];
for (int i = 0; i < num; i++) {
imageView = new ImageView(context);
imageView.setBackgroundResource(R.drawable.poster_point_selector); LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(12, 12);
mLayoutParams.rightMargin = 8;
mLayoutParams.leftMargin = 8;
mLayoutParams.topMargin = 24;
mLayoutParams.bottomMargin = 28; points[i] = imageView;
// 设置位置tag,方便取出与当前位置对应
points[i].setTag(i);
// 默认都设为灰色
points[i].setEnabled(false);
// 给每个小点设置监听
points[i].setOnClickListener(new pointListener());
container.addView(points[i], mLayoutParams);
}
// 设置为白色,即选中状态
points[currentIndex].setEnabled(true);
} private class viewpagerListener implements OnPageChangeListener { @Override
public void onPageScrollStateChanged(int arg0) {
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
} @Override
public void onPageSelected(int position) {
// 设置底部小点选中状态
setCurDot(position);
}
} private class pointListener implements OnClickListener { @Override
public void onClick(View v) {
int position = (Integer) v.getTag();
setCurView(position);
setCurDot(position);
}
} /**
* 设置当前页面的位置
*/
private void setCurView(int position) {
if (position < 0 || position >= pageNum) {
return;
}
viewPager.setCurrentItem(position);
} /**
* 设置当前的小点的位置
*/
private void setCurDot(int positon) {
if (positon < 0 || positon > pageNum - 1 || currentIndex == positon) {
return;
}
points[positon].setEnabled(true);
points[currentIndex].setEnabled(false);
currentIndex = positon;
} }
项目总结:
对于页面动态切换,采用handle进行切换;
代码:http://pan.baidu.com/s/1jJH1O
ViewPager 滑动页(二)的更多相关文章
- ViewPager 滑动页(四)
需求:在ViewPager 滑动页(三) 基础上,减少界面层级. 效果图: 图层数变更前: 图层数变更后: 主要代码实现: <?xml version="1.0" encod ...
- ViewPager 滑动页(三)
需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,当滑动到最后一页时,结束当前activity,进入下一个activity: 效果图: 实现分析: 1.目录结构: 代码实现: 1.Po ...
- ViewPager 滑动页(一)
需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作: 效果图: 实现分析: 1.目录结构: 代码实现: 1.fragment_main.xml <RelativeLayout xm ...
- 【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离
在项目中做了一个ViewPager+Fragment滑动翻页的效果,在模拟器和小米手机上测试也比较正常.但是换到4.7以上屏幕测试的时候发现老是滑动失效. 因为系统默认的滑动策略是当用户滑动超过半屏之 ...
- (转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌 ...
- ViewPager实现页卡的3种方法(谷歌组件)
----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...
- ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)
效果图: 添加依赖包: compile ‘com.android.support:design:‘ 布局文件: <?xml version="1.0" encoding=&q ...
- android开发学习之ViewPager滑动事件讲解
android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...
- PullToRefreshListView中嵌套ViewPager滑动冲突的解决
PullToRefreshListView中嵌套ViewPager滑动冲突的解决 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部 ...
随机推荐
- poi导出到excel步骤分析
在没用过poi之前感觉poi是很高大上的样子, 项目中用了发现poi的代码重复性很高类似于jdbc的模板代码, 项目中如果大量使用最好封装起来; 总结一下归结为6步 1 打开或新创建一个工作薄(使用H ...
- iOS9下修改回HTTP模式进行网络请求
升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错 The resource could not be loaded because the App Transport Sec ...
- DataTableExtensions.AsEnumerable 方法
在下面的示例中,DisplayProducts 方法接收一个数据表,其中包含名为 ProductName一个 DataColumn,提取 ProductName 值,然后输出值. using Syst ...
- Contest2037 - CSU Monthly 2013 Oct(中南大学2013年10月月赛水题部分题解)
Problem A: Small change 题解:http://www.cnblogs.com/crazyapple/p/3349469.html Problem B: Scoop water 题 ...
- NOSQL Mongo入门学习笔记 - 数据的基本插入(二)
成功运行起来mongo之后,进入了命令行模式,mongo默认会选择test数据库 1. 使用db命令打印出来当前选定的数据库: > db test 2. 使用show dbs 命令可以打印出数据 ...
- XCode6.1中的ios7.1适配
在xcode6.1中新创建的项目,运行在我的ios7.1的ipod touch上时(与5s的一样的尺寸, Retina屏幕), 上下出现了黑边,由于没有下载7.1的模拟器,不知道模拟器上有无问题, 查 ...
- 团体程序设计天梯赛-练习集L2-004. 这是二叉搜索树吗
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- Firefly 配置说明!
原地址:http://www.9miao.com/question-15-43023.html 下图一一个典型的config.json的配置:<ignore_js_op> "db ...
- CSU1327+贪心+模拟
题意简单,中文题目 方法:对于一个数 从左往右找相同的数 ,有就改变靠右的,同时把该数的右边全置0 注意!!!!n<0!!! /* */ #include<algorithm> #i ...
- C++动态链接库测试实例
前话 上一章节我导出了一个动态链接库 要使用该链接库,我们还需要该链接库对外公开的函数,即头文件 下面开始实例 测试实例 第一步--将动态链接库的dll.lib.和头文件导入项目中 文件目录如下: 项 ...