android画廊效果的轮播图,ViewPage实现无限轮播画廊效果

android画廊效果的轮播图,ViewPage实现无限轮播画廊效果1.效果图2.布局文件主要使用的android:clipChildren的意思:是否限制子View在其范围内。再父布局和viewpager中设置该属性,要显示三个界面,还要设置marginleft和marginRightandroid:layout_width=”match_parent”android:layout_height=”match_parent”android:clip…

大家好,又见面了,我是你们的朋友全栈君。

1. 效果图

f182232482a0160bd2f5953fa1bc01aa.gif

2. 布局文件

主要使用的 android:clipChildren的意思:是否限制子View在其范围内。再父布局和viewpager中设置该属性  ,要显示三个界面 ,还要设置marginleft和marginRight

android:layout_width=”match_parent” android:layout_height=”match_parent”

android:clipChildren=”false”

>

android:id=”@+id/vp”

android:layout_width=”match_parent”

android:clipChildren=”false”

android:layout_marginTop=”30dp”

android:layout_marginLeft=”60dp”

android:layout_marginRight=”60dp”

android:layout_height=”150dp”>

3. Adapter

private class MyAdapter extends PagerAdapter{

@Override

public int getCount() {

return Integer.MAX_VALUE;//无限轮播

}

@Override

public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {

return view==o;

}

@NonNull

@Override

public Object instantiateItem(@NonNull ViewGroup container, int position) {

View view=LayoutInflater.from(Grally2Activity.this).inflate(R.layout.item_vp,null);

int newwPos=position%(datas.size());//对应数据中的位置

ImageView img=view.findViewById(R.id.img);

img.setImageResource(datas.get(newwPos));

container.addView(view);

return view;

}

@Override

public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object

object) {

// super.destroyItem(container, position, object);

container.removeView((View) object);

}

}

4.关键点PageTransformer

public class Scalltransformer implements ViewPager.PageTransformer {

private float MINSCALE=0.8f;//最小缩放值

/**

* position取值特点:

* 假设页面从0~1,则:

* 第一个页面position变化为[0,-1]

* 第二个页面position变化为[1,0]

*

* @param view

* @param v

*/

@Override

public void transformPage(@NonNull View view, float v) {

float scale;//view 应缩放的值

if(v>1||v

scale=MINSCALE;

}else if(v<0){

scale=MINSCALE+(1+v)*(1-MINSCALE);

}else{

scale=MINSCALE+(1-v)*(1-MINSCALE);

}

view.setScaleY(scale);

view.setScaleX(scale);

}

}

5.Activity代码

public class Grally2Activity extends AppCompatActivity {

@BindView(R.id.vp)

ViewPager vp;

private List datas=new ArrayList<>();

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_grally);

ButterKnife.bind(this);

initDatas();

initVP();

}

private void initVP() {

vp.setPageMargin(20);//设置ViewPager中子布局的间隔

vp.setOffscreenPageLimit(2);

vp.setPageTransformer(false,new Scalltransformer());

vp.setAdapter(new MyAdapter());

vp.setCurrentItem(Integer.MAX_VALUE/2-(Integer.MAX_VALUE/2%datas.size()));//设置首个轮播显示的位置 实现左右滑动 且首页面对应的是第一个数据

}

private void initDatas() {

datas.add(R.mipmap.p2);

datas.add(R.mipmap.p3);

datas.add(R.mipmap.p4);

datas.add(R.mipmap.p5);

}

private class MyAdapter extends PagerAdapter{

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

@Override

public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {

return view==o;

}

@NonNull

@Override

public Object instantiateItem(@NonNull ViewGroup container, int position) {

View view=LayoutInflater.from(Grally2Activity.this).inflate(R.layout.item_vp,null);

int newwPos=position%(datas.size());

ImageView img=view.findViewById(R.id.img);

img.setImageResource(datas.get(newwPos));

container.addView(view);

return view;

}

@Override

public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object

object) {

// super.destroyItem(container, position, object);

container.removeView((View) object);

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130517.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • epoll高度封装reactor,几乎所有可见服务器的底层框架「建议收藏」

    epoll高度封装reactor,几乎所有可见服务器的底层框架「建议收藏」epoll高度封装reactor,几乎所有可见服务器的底层框架

    2022年10月31日
  • PLC编程入门基础技术知识

    PLC编程入门基础技术知识PLC编程入门基础技术知识第一章可编程控制器简介可编程序控制器,英文称ProgrammableController,简称PC。但由于PC容易和个人计算机(PersonalComputer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。PLC是微机技术与

  • vue路由懒加载实现_vue路由懒加载实现原理

    vue路由懒加载实现_vue路由懒加载实现原理某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:/user/aaaa或/user/bbbb。p除了有前面的/user之外,后面还跟上了用户的ID。这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)。1、配置router2、使用路由3、创造用户组件并使用传进来的用户信息在compute中用this.$route.params.userId,但是mustache语法中直接$route.pa

  • 以太坊客户端Ethereum Wallet与Geth区别简介

    以太坊客户端Ethereum Wallet与Geth区别简介

  • cs架构嵌入bs_cs架构与bs架构的对比

    cs架构嵌入bs_cs架构与bs架构的对比主要区别:Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.1.硬件环境不同C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.B/S建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备.信息管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行2.对…

  • 蓝桥杯真题总结(蓝桥杯考什么)

    Python获取每一位的数字,并返回到列表:方法一:whilevalue:result.append(value%10)value=value//10#逆序,按正常的顺序返回result.reverse()方法二:list(map(int,str(value)))方法三:#divmod()是内置函数,返回整商和余数组成的元组result=[]whilevalue:value,r=divmod(value,1

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号