前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android画廊效果的轮播图,ViewPage实现无限轮播画廊效果

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

作者头像
全栈程序员站长
发布2022-08-11 13:01:49
2K0
发布2022-08-11 13:01:49
举报
文章被收录于专栏:全栈程序员必看

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

1. 效果图

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.cn/130517.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档