通过在滚动的时候动态的改变每一个item的padding值进行实现。

先看看效果吧:

以下是源代码。重点在MyOnPageChangeListener.java.

1、activity_viewpager.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:background="#FF000000"

>

<android.support.v4.view.ViewPager

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/viewpager"

/>

</LinearLayout>

2、ViewPagerActivity.java

package com.example.duokan;

import java.util.ArrayList;

import android.app.Activity;

import android.os.Bundle;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.LayoutParams;

import android.view.Window;

import android.widget.ImageView;

import android.widget.ImageView.ScaleType;

/**

* ViewPagerActivity

* @author xinye

*

*/

public class ViewPagerActivity extends Activity {

private ViewPager mViewPager = null;

private MyViewPagerAdapter mAdapter = null;

private MyOnPageChangeListener mListener = null;

private ArrayList<ImageView> mViewList = null;

private Integer[] mImageDrawableArray = {

R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5 };

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_viewpager);

mViewPager = (ViewPager) findViewById(R.id.viewpager);

mViewList = new ArrayList<ImageView>();

LayoutParams params = new LayoutParams();

params.width = LayoutParams.FILL_PARENT;

params.height = LayoutParams.FILL_PARENT;

for (int i = 0; i < mImageDrawableArray.length; i++) {

ImageView imageView = new ImageView(ViewPagerActivity.this);

imageView.setImageResource(mImageDrawableArray[i]);

imageView.setScaleType(ScaleType.FIT_XY);

imageView.setLayoutParams(params);

this.mViewList.add(imageView);

}

mAdapter = new MyViewPagerAdapter(ViewPagerActivity.this, mViewList);

mViewPager.setAdapter(mAdapter);

mListener = new MyOnPageChangeListener(ViewPagerActivity.this,

mViewPager, mViewList);

mViewPager.setOnPageChangeListener(mListener);

}

}

3、MyViewPagerAdapter.java

package com.example.duokan;

import java.util.ArrayList;

import android.content.Context;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.View;

import android.widget.ImageView;

/**

* PagerAdapter

* @author xinye

*

*/

public class MyViewPagerAdapter extends PagerAdapter {

private Context mContext;

private ArrayList<ImageView> mViewList = null;

public MyViewPagerAdapter(Context context,ArrayList<ImageView> list){

this.mContext = context;

this.mViewList = list;

}

@Override

public void destroyItem(View container, int position, Object object) {

ImageView view = mViewList.get(position);

((ViewPager) container).removeView(view);

//        view.setImageBitmap(null);

}

@Override

public Object instantiateItem(View container, int position) {

if(mViewList.get(position).getParent() == null){

((ViewPager) container).addView(mViewList.get(position));

}

return mViewList.get(position);

}

@Override

public int getCount() {

return mViewList.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

}

4、MyOnPageChangeListener.java

package com.example.duokan;

import java.util.ArrayList;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.ImageView;

/**

*

* @author xinye

*

*/

public class MyOnPageChangeListener implements OnPageChangeListener {

int offset = 0;

int downX = 0;

private Context mContext;

private ArrayList<ImageView> mViewList;

private ViewPager mViewPager;

public MyOnPageChangeListener(Context context,ViewPager viewPager,ArrayList<ImageView> list){

this.mContext = context;

this.mViewList = list;

mViewPager = viewPager;

mViewPager.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch(event.getAction()){

case MotionEvent.ACTION_DOWN:

downX = (int) event.getX();

break;

case MotionEvent.ACTION_MOVE:

offset = (int) (event.getX() - downX);

break;

case MotionEvent.ACTION_UP:

offset = 0;

downX = 0;

break;

}

return false;

}

});

}

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){

int paddingNum = 200;

int paddingNext = (int)((paddingNum * (1 - positionOffset) / 2));

int paddingCurr = (int)((paddingNum * positionOffset / 2));

int width = mViewList.get(position).getWidth();

float scale = ((float)Math.abs(offset) / width);

if(positionOffset == 0){

paddingNext = (int)(paddingNum * (1 - scale) / 2);

paddingCurr = (int)(paddingNum * scale / 2);

}

if(position == 0){

if(offset > 0){

if(positionOffset == 0){

mViewList.get(position).setAlpha((int)(0xFF * (1 - scale)));

}else{

mViewList.get(position).setAlpha((int)(0xFF * scale));

mViewList.get(position + 1).setAlpha((int)(0xFF * positionOffset));

}

mViewList.get(position).setPadding(paddingCurr,paddingCurr,-2 * paddingCurr,paddingCurr);

mViewList.get(position + 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

}else{

mViewList.get(position).setAlpha((int)(0xFF * (1 - scale)));

if(offset != 0){

mViewList.get(1).setAlpha((int)(0xFF * scale));

}else{

mViewList.get(1).setAlpha(0xFF);

}

mViewList.get(position).setPadding(paddingCurr,paddingCurr,paddingCurr,paddingCurr);

mViewList.get(position + 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

}

}else if(position == mViewList.size() - 1){

if(offset < 0){

mViewList.get(position).setAlpha((int)(0xFF * (1 - scale)));

mViewList.get(position).setPadding(paddingCurr,paddingCurr,paddingCurr,paddingCurr);

mViewList.get(position).setPadding(-2 * paddingCurr,paddingCurr,paddingCurr,paddingCurr);

}else{

mViewList.get(position - 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

mViewList.get(position).setPadding(paddingCurr,paddingCurr,paddingCurr,paddingCurr);

}

}else{

if(offset == 0 || positionOffset == 0){

mViewList.get(position + 1).setPadding(0,0,0,0);

mViewList.get(position - 1).setPadding(0,0,0,0);

mViewList.get(position).setPadding(0,0,0,0);

mViewList.get(position + 1).setAlpha(0xFF);

mViewList.get(position - 1).setAlpha(0xFF);

mViewList.get(position).setAlpha(0xFF);

return ;

}

if(offset < 0){

mViewList.get(position).setAlpha((int)(0xFF * (1 - positionOffset)));

mViewList.get(position + 1).setAlpha((int)(0xFF * positionOffset));

mViewList.get(position - 1).setAlpha((int)(0xFF * positionOffset));

mViewList.get(position + 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

mViewList.get(position - 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

mViewList.get(position).setPadding(paddingCurr,paddingCurr,paddingCurr,paddingCurr);

}else{

mViewList.get(position - 1).setAlpha((int)(0xFF * positionOffset));

mViewList.get(position + 1).setAlpha((int)(0xFF * positionOffset));

mViewList.get(position).setAlpha((int)(0xFF * (1 - positionOffset)));

mViewList.get(position + 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

mViewList.get(position - 1).setPadding(paddingNext,paddingNext,paddingNext,paddingNext);

mViewList.get(position).setPadding(paddingCurr,paddingCurr,paddingCurr,paddingCurr);

}

}

//     mViewPager.invalidate();

}

@Override

public void onPageSelected(int position){

mViewList.get(position).setAlpha(0xFF);

mViewList.get(position).setPadding(0, 0, 0, 0);

for(int i = 0;i < mViewList.size();i++){

mViewList.get(i).setPadding(0, 0, 0, 0);

mViewList.get(i).setAlpha(0xFF);

}

}

@Override

public void onPageScrollStateChanged(int state){

if(state == ViewPager.SCROLL_STATE_IDLE){

for(int i = 0;i < mViewList.size();i++){

mViewList.get(i).setAlpha(0xFF);

mViewList.get(i).setPadding(0, 0, 0, 0);

}

}

}

}

转载于:https://www.cnblogs.com/xinye/archive/2013/06/09/3128209.html

android仿多看阅读三屏滚动效果 -- 更改OnPageChangeListener相关推荐

  1. android开发游记:仿支付宝余额数字累加滚动效果的实现

    支付宝更新9.0后,细心的朋友会发现新增了一个动画效果,就是进入我的钱包的时候,我的余额会有一段滚动显示的动画效果,比如说你有100块,余额就从0滚动到100,看到自己的钱在不断涨,让我们这些穷屌丝莫 ...

  2. android 仿ios动画效果代码,Android仿IOS上拉下拉弹性效果的实例代码

    用过iphone的朋友相信都体验过页面上拉下拉有一个弹性的效果,使用起来用户体验很好:Android并没有给我们封装这样一个效果,我们来看下在Android里如何实现这个效果.先看效果,感觉有些时候还 ...

  3. html5页面可见xing,【 前端资源 网页插件 】全屏滚动效果H5FullscreenPage.js

    前提: 介于现在很多活动都使用了 类似全屏滚动效果 尤其在微信里面 我自己开发了一个快速构建 此类项目的控件 与市面上大部分控件不同的是此控件还支持元素的动画效果 并提供多种元素效果 基于zepto. ...

  4. Android 仿拼多多可水平滚动RecyclerView,自定义滚动条滚动距离

    Android 仿拼多多可水平滚动RecyclerView,自定义滚动条滚动距离 2020年,希望大家一切平安如意,毕竟这是个出人意料的多事之秋. 一.效果图: 二.快速实现: 1.主函数代码: im ...

  5. html5 滚屏效果 插件,jQuery插件fullPage.js实现全屏滚动效果

    本文实例为大家分享了全屏滚动插件fullPage.js的具体使用方法,供大家参考,具体内容如下 0.01 基本演示  的HTML 布局 以及js 代码 //需要连接 连接的三个文件 //css文件 / ...

  6. pagePiling.js - 创建美丽的全屏滚动效果

    在线演示 在线演示 本地下载 全屏滚动效果是近期很流行的网页设计形式,带给用户良好的视觉和交互体验. pagePiling.js 这款jQuery插件能够帮助前端开发者轻松实现这样的效果.支持全部的主 ...

  7. android 今日头条加载动画,Android 仿今日头条简单的刷新效果实例代码

    点击按钮,先自动进行下拉刷新,也可以手动刷新,刷新完后,最后就多一行数据.有四个选项卡. 前两天导师要求做一个给本科学生预定机房座位的app,出发点来自这里.做着做着遇到很多问题,都解决了.这个效果感 ...

  8. 可用!三行代码高仿高德地图三段式抽屉效果

    三行代码 废话不在前面说,直接上代码! 将 XML 根布局设置为 CoordinatorLayout <android.support.design.widget.CoordinatorLayo ...

  9. Android仿今日头条图片滑动退出效果

    资源下载(2C币) 逛CSDN的时候,看到几篇写仿今日头条图片滑动退出效果的文章,闲着无聊便想着也给自己项目加上,实现的思路有很多种,本着就近原则选了一篇与自己思路相近的文章结合自己的实践总结一下. ...

最新文章

  1. Debain/ArchLinux/Gentoo 等将合并为超级Linux
  2. 数据结构--二叉树、满二叉树、完全二叉树
  3. CentOS 7 巨大变动之 firewalld 取代 iptables
  4. java jdk安装教程win10_win10系统安装java的详细步骤(图文)
  5. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(1)--RANRAC
  6. JAVA读写文件模板
  7. 移动开发之设计稿转换页面单位尺寸
  8. 2021华为软件精英挑战赛的baseLine,Java版,仅供参考,无核心算法
  9. java if里面并列_多个if语句并列-两个if语句并列-if语句两个并列条件怎么表示
  10. linux下weblogic新建域domian
  11. [保研直硕直博经验分享-2019] (上海交大计算机系夏令营+九推)
  12. 美通社企业新闻汇总 | 2019.1.23 | 上海迪士尼建疯狂动物城园区;戴森运营总部移至新加坡...
  13. 计算机芯片英文翻译,芯片的英文翻译,芯片英语怎么说
  14. 运维工程师的工作内容有哪些?能详细列举一下吗?
  15. 【数据中台】数据中台架构搭建百科全书
  16. 网络实验之EtherChannel技术实践
  17. 《人物动作:角色骨骼、蒙皮制作工艺》
  18. [计算机组成原理]2-6、算数移位、逻辑移位、循环移位
  19. 手机屏幕xy坐标软件_软件工程中的xy问题
  20. 2021年建5G基站60万个;中兴遭减持;三大运营商2020年成绩单;电信发布新手机...

热门文章

  1. 我如何构建一个交互式仪表板Web应用程序以可视化拳击数据
  2. Python爬虫+颜值打分,5000+图片找到你的Mrs. Right
  3. 历时三年“鸽王”Filecoin主网上线,分布式存储市场将迎来最强劲敌?
  4. Eclipse_Java文件注解乱码
  5. 【软件工程】什么是软件工程
  6. Python的基础语法及使用
  7. python3 陌生的角落(1):基础语法
  8. 「GoTeam 招聘时间」传音移动互联 容器开发(上海)
  9. 怎么旋转PDF文件中的页面
  10. buu-[Zer0pts2020]Can you guess it?