需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,当滑动到最后一页时,结束当前activity,进入下一个activity;

效果图:

实现分析:

1.目录结构:

代码实现:

1.PosterView.java

package com.jjc.demo;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.content.Context;
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;
import android.widget.Toast; 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; 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(){
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();
} 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 {
int pageState = 100; @Override
public void onPageScrollStateChanged(int arg0) {
/**
* arg0:什么都没做
* arg1:正在滑动
* arg2:滑动完毕
*/
pageState = arg0;
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { if(!posterList.isEmpty() && arg0 == (posterList.size()-1) && pageState == 1){
Toast.makeText(context, "最后一页", Toast.LENGTH_SHORT).show();
((Activity)context).finish();
}
} @Override
public void onPageSelected(int state) {
setCurDot(state);
}
} 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;
} }

项目总结:

  ViewPager的onPageChangeListener监听获取,当前的滑动状态;

  http://www.cnblogs.com/sishuiliuyun/p/3962347.html

代码:http://pan.baidu.com/s/1gdBZTGv

ViewPager 滑动页(三)的更多相关文章

  1. ViewPager 滑动页(四)

    需求:在ViewPager 滑动页(三) 基础上,减少界面层级. 效果图: 图层数变更前: 图层数变更后: 主要代码实现: <?xml version="1.0" encod ...

  2. ViewPager 滑动页(二)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,并实现页面自动切换: 效果图: 实现分析: 1.目录结构: 代码实现: 1.PosterView.java package com.j ...

  3. ViewPager 滑动页(一)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作: 效果图: 实现分析: 1.目录结构: 代码实现: 1.fragment_main.xml <RelativeLayout xm ...

  4. 【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离

    在项目中做了一个ViewPager+Fragment滑动翻页的效果,在模拟器和小米手机上测试也比较正常.但是换到4.7以上屏幕测试的时候发现老是滑动失效. 因为系统默认的滑动策略是当用户滑动超过半屏之 ...

  5. (转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌 ...

  6. android开发学习之ViewPager滑动事件讲解

    android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...

  7. 如何禁止内部viewPager滑动

    众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*----*). 情况是这样的: activity中有一个viewPager,viewPager中加入3个Fragme ...

  8. ViewPager实现页卡的3种方法(谷歌组件)

    ----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...

  9. ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)

    效果图: 添加依赖包: compile ‘com.android.support:design:‘ 布局文件: <?xml version="1.0" encoding=&q ...

随机推荐

  1. fedora下缺少autopoint包的解决办法

    编译过程中,报错,缺少autopoint包 然而无论是yum install autopoint 还是yum search autopoint都没有理想的答案 执行yum install gettex ...

  2. Javascript 中判断是谷歌浏览器和IE浏览器的方法

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. [SQL Server系] -- 视图

    1:定义 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据. 从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表. 从数据库系统内部来看,视图是由一张或多张表中的数 ...

  4. Pycharm中的实用功能(网上看到的,感觉还不错)

    实时比较 PyCharm 对一个文件里你做的改动保持实时的跟踪,通过在编辑器的左侧栏显示一个蓝色的标记.这一点非常方便,我之前一直是在Eclipse里面用命令“Compare against HEAD ...

  5. *[topcoder]BracketExpressions

    http://community.topcoder.com/stat?c=problem_statement&pm=13243 就是能否通过把字符串中的'X'替换成"()" ...

  6. highcharts 结合phantomjs纯后台生成图片

    highcharts 结合phantomjs纯后台生成图片 highcharts 这个图表展示插件我想大家应该都知道,纯javascript编写,相比那些flash图表插件有很大的优势,至少浏览器不用 ...

  7. PHP优化杂烩

    讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的. pool 一个让人沮丧的消息是绝大多数 PHP 程序员都 ...

  8. ASP.NET Web API上实现 Web Socket

    1. 什么是Web Socket Web Socket是Html5中引入的通信机制,它为浏览器与后台服务器之间提供了基于TCP的全双工的通信通道.用以替代以往的LongPooling等comet st ...

  9. 异常:Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.log4jdbc.Properties

    参考文章: 使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection 使用 log4jdbc格式化输出SQL,maven配置如下: <dependency> ...

  10. Struts2注解配置之@Namespace(四)

    今天开始学习@Namespace注解. 还是先看一段代码: package com.example.actions; import org.apache.struts2.convention.anno ...