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);

}

}

}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • foreach遍历list删除元素一定会报错?

    list集合平常自以为用的非常熟了,原来只是用add()方法熟练而已,碰到remove一报错就彻底暴露了自己的短板啦。来,给list集合删除某些元素,先上一段代码:   1)报错啦   Listlist=newArrayList();list.add(“1”);list.add(“2”);list.add(“3”)

    2022年4月6日
    97
  • lspci 安装_ipswme下载的系统如何安装

    lspci 安装_ipswme下载的系统如何安装在原版的busy-box做出来的文件系统中,lspci命令只有两个选项:ynq>lspci-hlspci:invalidoption–‘h’BusyBoxv1.20.1(2012-11-2713:37:12MST)multi-callbinary.Usage:lspci[-mk]ListallPCIdevices-m

    2025年10月17日
    4
  • 什么是UAT[通俗易懂]

    什么是UAT[通俗易懂]基本概念UAT,英文UserAcceptanceTest的简写,也就是用户验收测试,或用户可接受测试,系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测

    2022年8月6日
    4
  • .OPF文件剖析「建议收藏」

    .OPF文件剖析「建议收藏」OPF文档是epub电子书的核心文件,且是一个标准的XML文件,依据OPF规范,主要由五个部分组成:1、2829303132333435…

    2022年8月2日
    20
  • pip和conda安装与卸载tensorflow、pycharm中使用特定的conda虚拟环境「建议收藏」

    pip和conda安装与卸载tensorflow、pycharm中使用特定的conda虚拟环境「建议收藏」写吴恩达dp作业做的准备参考https://blog.csdn.net/ccgcccccc/article/details/89058445根据他的配置要求来配置文件pipinstalltensorflow==1.13.0rc2-ihttps://pypi.tuna.tsinghua.edu.cn/simple或者-ihttps://mirrors.aliyun.com/py…

    2022年6月22日
    47
  • python中for循环加速_如何提高python 中for循环的效率[通俗易懂]

    python中for循环加速_如何提高python 中for循环的效率[通俗易懂]对于某个城市的出租车数据,一天就有33210000条记录,如何将每辆车的数据单独拎出来放到一个专属的文件中呢?思路很简单:就是循环33210000条记录,将每辆车的数据搬运到它该去的文件中。但是对于3000多万条数据,一个一个循环太消耗时间,我花了2个小时才搬运了60万数据,算算3000万我需要花费100个小时,也就需要4-5天。并且还需要保证这五天全天开机,不能出现卡机的事故。因此,需要使用并行…

    2022年8月12日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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