相关文章

Android自定义轮播效果

ViewPager一屏多页面显示两侧无触摸/滑动事件

效果展示

实现思路

最难的写的是 transformPage 这里面的一段逻辑。我总结为如下几点:

第一步:中间 哪张 的 position 属于哪个范围把所有值打印出来观察获得
第二步:根据 观察 结果把区间分好
第三步:相邻区间保证连贯性
注意:这里一次性打印多少个 page 是由页面一次显示多少 imageView 决定的

代码示例

MainActivity.java

package com.wust.mydialog;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
public class MainActivity extends Activity {private ViewPager vp_img;private int[] imageIds = new int[]{R.drawable.pre1, R.drawable.pre2, R.drawable.pre3, R.drawable.pre4,R.drawable.pre5, R.drawable.pre6, R.drawable.pre7, R.drawable.pre8,R.drawable.pre9, R.drawable.pre10, R.drawable.pre11, R.drawable.pre12,R.drawable.pre13, R.drawable.pre14, R.drawable.pre15, R.drawable.pre16,R.drawable.pre17, R.drawable.pre18, R.drawable.pre19, R.drawable.pre20,R.drawable.pre21};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindView();bindData();}private void bindView() {vp_img = findViewById(R.id.vp_img);}private void bindData() {MyAdapter myAdapter = new MyAdapter();vp_img.setOffscreenPageLimit(5);vp_img.setPageMargin(10);vp_img.setPageTransformer(false,new MyTransformer());vp_img.setAdapter(myAdapter);}private class MyAdapter extends PagerAdapter {@Overridepublic int getCount() {return imageIds.length;}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {ImageView iv = new ImageView(getApplication());iv.setImageResource(imageIds[position]);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50,50);iv.setLayoutParams(params);container.addView(iv);return iv;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView((View) object);}}private class MyTransformer implements ViewPager.PageTransformer {@Overridepublic void transformPage(@NonNull View page, float position) {//第一步:中间 哪张 的 position 属于哪个范围把所有值打印出来观察获得//第二步:根据 观察 结果把区间分好//第三步:相邻区间保证连贯性//注意:这里一次性打印多少个 page 是由页面一次显示多少 imageView 决定的if (position>=1&&position<=2){page.setScaleY(1.0f + 0.5f*(position-(int)Math.abs(position)));page.setScaleX(1.0f + 0.5f*(position-(int)Math.abs(position)));}else if (position<=0||position>=3){page.setScaleY(0.5f);page.setScaleX(0.5f);}else if (position>0&&position<1){page.setScaleY(0.5f + 0.5f*(position-(int)Math.abs(position)));page.setScaleX(0.5f + 0.5f*(position-(int)Math.abs(position)));}else if (position>2&&position<3){page.setScaleY(0.5f + 1.0f*(1-position+(int)Math.abs(position)));page.setScaleX(0.5f + 1.0f*(1-position+(int)Math.abs(position)));}}}
}

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"android:clipChildren="false"><androidx.viewpager.widget.ViewPagerandroid:id="@+id/vp_img"android:layout_width="match_parent"android:layout_height="100dp"android:layout_centerInParent="true"android:paddingLeft="150dp"android:paddingRight="150dp"android:clipToPadding="false"/></RelativeLayout>

ViewPage实现一屏多页面显示(进阶版)相关推荐

  1. elementui的tree组件页面显示不出数据_只要10分钟,教你配置出炫酷的数据可视化大屏...

    在电影<摩天营救>中,监控中心的全方位展示屏幕给人印象深刻.现在这种立体化大屏幕似乎成了好莱坞大片的标配.其实,这种逼格很高的镜头就是一个数据可视化大屏.随着社会信息化的高速增长,数据可视 ...

  2. 720phi10p 和 720p有什么区别_新电脑明明是高清屏为什么有些页面显示模糊

    随着科技的进步,现在电脑有了各种技术 .什么高色域,高尼特显示亮度 ,IPS硬屏高清,144赫兹高刷新率,三面窄 四面窄全面屏 2K 4K分辨率.但是经常我们在使用过程中经常会发现一些页面显示很模糊, ...

  3. php怎么只显示一页网页,授课时电脑投屏怎么只显示一个页面

    授课时电脑投屏怎么只显示一个页面 有网友留言:"授课时电脑投屏怎么只显示一个页面的,大屏幕自带手写批注功能,支持在大屏幕上授课." 像这种需求的应用案例不在少数,还记得在4月份的时 ...

  4. 手机端页面自适应解决方案—rem布局进阶版

    旧版rem布局 <手机端页面自适应解决方案-rem布局>, 此方案仅适用于移动端web 文章底部常见问题说明第四条,笔者已给出一个相当便捷的解决方案,欢迎留言交流.(2017/9/9) 该 ...

  5. 多屏互动——H5中级进阶

    声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载. 作者:王诗诗,前端新人,专职前端工作两年.曾供职于AMI做底层软件开发.喜欢分析H5代码,追崇用简单的CSS,构建精美动效,做前端之前 ...

  6. html+手机自适应源码,手机端页面自适应解决方案—rem布局(进阶版,附源码示例)...

    一年前笔者写了一篇 <手机端页面自适应解决方案-rem布局>,意外受到很多朋友的关注和喜欢.但随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem ...

  7. 为啥我从后台查到的值在页面显示的是undefined_再谈一个管理后台列表功能应有的素质...

    ​大家能看到的这个号第1篇文章<无心朝政,列表功能分析下>就是讲列表功能.虽然当时写的时候特别认真,但基本是围绕"列表功能"这个广泛的词来阐述的. 最近在做一个体育赛事 ...

  8. 移动端页面自适应解决方案—rem布局(进阶版)

    之前的一篇<手机端页面自适应解决方案-rem布局>随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem布局(进阶版) 该方案使用相当简单,把下面这 ...

  9. 图标和文字跟着div比例放大缩小_Word文档页面显示比例与单页多页,文本的输入、修改、删除与插入...

    在默认情况下,文档页面都以100%显示,但最大可放大到500%,最小可缩小到10%,可根据自己的爱好设置.一般保持默认即可.另外,还可以设置一屏显示一页还是多页:此外,还能把文档设置为页宽. 在 Wo ...

  10. win10电脑黑屏只有鼠标箭头_电脑开机就黑屏,只显示鼠标怎么办?别急,简单几步,轻松解决!...

    我们的笔记本在日常使用中 会遇到各种各样的问题 今天,小编教大家解决一个 常见的开机小故障 ↓ 开机黑屏,只显示鼠标 01 开机黑屏的原因是什么?导致电脑黑屏的原因有很多,首先需要确认是硬件问题还是系 ...

最新文章

  1. linux shell head tail 用法简介
  2. 常见的数据库管理系统排名(DBMS)
  3. spotify歌曲下载_使用Spotify数据预测哪些“ Novidades da semana”歌曲会成为热门歌曲
  4. 2019计算机开机号003期,2019年011期福彩中心开机号(附汇总)
  5. 无法恢复,欧洲云服务巨头数据中心起火
  6. 面试题:如何设计一个高并发的系统?
  7. 腾讯QQ空间g_tk算法
  8. 生成awr报告时报ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
  9. 算法设计 分析篇(摊销分析)
  10. SoC设计与验证——大型IP——PCIE控制器
  11. 正定矩阵(Positive Definite Matrices)、半正定矩阵(Positive Semidefinite Matrices)
  12. html怎么设置一个圆形区域,JS+HTML实现的圆形可点击区域示例【3种方法】
  13. TopFreeTheme精选免费模板【20130827】
  14. 周边pd是什么意思_饭圈说的pd意思 饭圈pb是什么意思的缩写
  15. 8086的储存器编址
  16. php程序检测不到vc9,XAMPP2016中文精简版启动失败 缺少运行库解决办法
  17. SQL语法 自然连接 外连接 内连接
  18. 芯片IC失效分析测试
  19. 高屋建瓴-------谈观看朱老师视频有感
  20. 对Titanic公开数据集进行缺失值统计

热门文章

  1. 开发如何转型做项目管理
  2. python共享单车数据分析_共享单车数据可视化分析(Python/Seaborn)
  3. 萤石云设备下线是什么导致的_萤石设备突然看不了,提示不在线怎么办?
  4. linux拷贝文件和目录命令,Linux 命令 - cp: 拷贝文件和目录
  5. 实验记录 | 8/8 阶段性结果整理(二)
  6. java中refresh是什么_浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
  7. Java中计算包含汉字字符串长度的方法
  8. win10修改计算机物理地址,两种方法教您修改Win10 Professional MAC物理地址
  9. 完整的VBA代码宝助手(完全开源)
  10. Ubuntu 设置 IP 地址和 hostname