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

相关推荐

  • 逻辑漏洞之越权、支付漏洞「建议收藏」

    逻辑漏洞之越权、支付漏洞「建议收藏」目录逻辑漏洞Web安全渗透三大核心方向输入输出登录体系、权限认证业务逻辑漏洞分类1、登录体系安全暴力破解cookie安全加密测试登录验证绕过任意注册2、业务一致性安全手机号篡改邮箱和用户名更改订单ID更改商品编号更改用户ID篡改流程顺序3、业务数据篡改金额数据篡改商品数量篡改最大数限制突破金额&优惠组合修改4、密码找回漏洞分析数据包,定位敏感信息分析找回机制修改数据包验证任意密码找回5、验证码突破暴力破解时间、次数突破回显测试验证码绕过测试验证检验机制猜解6、会话权限安全未授权访问水平&垂直

  • android之选择联系人并返回电话号码

    在跟着这个教程联系的时候,它所用到的选择联系人方式是自己从数据库里把联系人读取出来,然后用listview显示,选择后返回手机号码,这样做在点击选择联系人的时候,需要时间去加载,并且显示出来的联系人好像并不全,总之感觉不好,想通过调用系统联系人的方式选择,不用自己去处理界面。结果还不错:MainActivity:package jason.pickcontact;imp

  • Eclipse中代码字体背景变红/变黄/变绿

    Eclipse中代码字体背景变红/变黄/变绿如图所示:运行之后,突然这样。到底是什么原因导致的呢?:经过查找资料可知:因为Eclipse中有覆盖代码功能(绿色表示代码被执行到,红色表示代码没有被执行到,黄色表示代码部分执行到)怎么解决这个问题:Remove All Sessions就是点击下图红色框中的部分。                            或者点击window–&gt;Show view –&gt; Other …

  • 防欺诈盗号,请勿支付或输入qq密码

    防欺诈盗号,请勿支付或输入qq密码不知道读者是否留意过这种情况:通过微信内置浏览器打开带有表单的页面,点击其中任何一个表单项都会在窗口顶部显示红色背景的防欺诈警告信息“防欺诈盗号,请勿支付或输入qq密码”,如下图所示  1)申请书下载地址:https://mp.weixin.qq.com/htmledition/res/urlrequest.doc。2)申请人主体材料包括:申请人的姓名(…

  • Python线程指南[通俗易懂]

    Python线程指南[通俗易懂]本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。注意:本文基于Python2.4完成;如果看到不明白的词汇请记得百度谷

  • 微信机器人的制作 原来如此简单

    微信机器人的制作 原来如此简单

    2021年11月10日

发表回复

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

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