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 作为头部 ...
随机推荐
- 转载 @html.ActionLink的几种参数格式
一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, ...
- EXTJS 资料 Ext.Ajax.request 获取返回数据
下面是一个登陆页面调用的EXTJS login function,通过 url: '/UI/HttpHandlerData/Login/Login.ashx',获取返回登陆账户和密码! Ext.onR ...
- 8 行 Node.js 代码实现代理服务器
接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作 ...
- SDUT2190救基友记1
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2190 思路 : 这个题,一开始以为是博弈,以为 ...
- HDU1429+bfs+状态压缩
bfs+状态压缩思路:用2进制表示每个钥匙是否已经被找到.. /* bfs+状态压缩 思路:用2进制表示每个钥匙是否已经被找到. */ #include<algorithm> #inclu ...
- *[topcoder]JumpFurther
http://community.topcoder.com/stat?c=problem_statement&pm=12300&rd=15699 题意:有一个无限长的阶梯,i从1到N, ...
- VC中支持中文的字符串比较函数
VS2008开发环境,多字符集和UNICODE字符集都可用. WCHAR * mbcsToUnicode(const char *zStr) { int nByte; WCHAR *zMbcsStr; ...
- Android:Style和Theme
在Web开发中,Html负责内容,CSS负责表现.同样,在Android开发中,可以使用Theme.Style+UI组件的方式实现内容和形式的分离. Style是针对窗体元素级别的,改变指定控件或者L ...
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
常用类库StringBuilder StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作. String 对象是不可变的. 每次使用 System. ...
- WPF使用第三方的字体(TTF文件)
一.准备好你要使用的字体文件,以TTF结尾的文件,然后复制到项目中,并设置Build Action(生成操作)为Resource(资源): 二.在App.xaml中或者你需要的地方添加资源的定义: & ...