返回顶部
首页 > 资讯 > 精选 >android viewpager怎么实现轮播效果
  • 335
分享到

android viewpager怎么实现轮播效果

2023-07-02 11:07:56 335人浏览 安东尼
摘要

本篇内容介绍了“Android viewpager怎么实现轮播效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!分为四步去实现:第

本篇内容介绍了“Android viewpager怎么实现轮播效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

android viewpager怎么实现轮播效果

分为四步去实现:

第一步是有限手动轮播;

第二步是无限轮播;

第三步是自动轮播;

第四步是指示器适配

第一步:有限手动轮播实现

布局:

<androidx.viewpager.widget.ViewPager    android:id="@+id/banner"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginStart="12dp"    android:layout_marginEnd="12dp" />

adapter实现:

public class BannerAdapter extends PagerAdapter {        private List<String> bannerList;     public BannerAdapter(List<String> bannerList) {        this.bannerList = bannerList;    }     @Override    public int getCount() {        return bannerList.size();    }     @Override    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {        return view == object;    }     @NonNull    @Override    public Object instantiateItem(@NonNull ViewGroup container, int position) {        ImageView bannerImageView = new ImageView(container.getContext());        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        bannerImageView.setLayoutParams(lp);        bannerImageView.setScaleType(ImageView.ScaleType.FIT_XY);        Glide.with(container.getContext()).load(bannerList.get(position)).into(bannerImageView);         container.addView(bannerImageView);        return bannerImageView;    }     @Override    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {        container.removeView((View) object);    }}

Activity中:

// scrollview中viewpager一定要设置高度,此处根据图片的宽高比来设定高度 int bannerWidth = (Utils.getScreenWidth(getContext()) - Utils.dip2pixel(getContext(), 24));LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) bannerView.getLayoutParams();lp.width = LinearLayout.LayoutParams.MATCH_PARENT;lp.height = (int) (bannerWidth * 90f / 345);bannerView.setLayoutParams(lp); bannerView.setAdapter(new BannerAdapter(getUrlList()));

注意:ScrollView包裹ViewPager时,ViewPager的高度一定要有确定值,否则内容无法加载出来,可以在xml中指定,也可以代码设定,但一定要有确定值。

第二步:无限轮播

无限轮播只需要在有限轮播的基础上,做以下两个改动点,修改getCount返回值且在加载数据时获取正确的数据源即可

public class BannerAdapter extends PagerAdapter {     private List<String> bannerList;     public BannerAdapter(List<String> bannerList) {        this.bannerList = bannerList;    }     @Override    public int getCount() {//        return bannerList.size();  // before        return Integer.MAX_VALUE;   // now    }     @Override    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {        return view == object;    }     @NonNull    @Override    public Object instantiateItem(@NonNull ViewGroup container, int position) {        ImageView bannerImageView = new ImageView(container.getContext());        int realPosition = position % bannerList.size(); // 获取要加载数据的真实位置        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        bannerImageView.setLayoutParams(lp);        bannerImageView.setScaleType(ImageView.ScaleType.FIT_XY);//        Glide.with(container.getContext()).load(bannerList.get(position)).into(bannerImageView); // before        Glide.with(container.getContext()).load(bannerList.get(realPosition)).into(bannerImageView); // now         container.addView(bannerImageView);        return bannerImageView;    }     @Override    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {        container.removeView((View) object);    }}

修改完发现banner只能向右无限轮播,第一次左滑滑不动,这个时候我们强制设置viewpager位置在中间就可以解决这个问题了

bannerView.setAdapter(new BannerAdapter(getUrlList()));bannerView.setCurrentItem(getUrlList().size() * 5);

第三步:自动轮播

handler每隔轮播间隔发送消息,设置viewpager为下一个位置

private Runnable bannerRunnable = new Runnable() {        @Override        public void run() {            bannerView.setCurrentItem(bannerView.getCurrentItem() + 1);            mHandler.postDelayed(bannerRunnable, 3000);        }    }; bannerView.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {             }             @Override            public void onPageSelected(int position) {                // 手滑动到某一位置,重新开始计时                start();            }             @Override            public void onPageScrollStateChanged(int state) {             }        }); private void start() {        mHandler.removeCallbacksAndMessages(null);        mHandler.postDelayed(bannerRunnable, 3000);    }

第四步:添加指示器

指示器样式及表现可以自己去根据需求实现,以相对简单和常见的小圆圈指示器为例,添加和banner数量相同的小圆圈,小圆圈设置selector,在选中时为黑色选中样式,在非选中时为灰色默认样式,根据当前选中的banner的实际position,设置指示器的selected属性,从而展示不同的样式

private void initIndicator() {        for (int i = 0; i < getUrlList().size(); i++) {            View view = new View(getActivity());            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(Utils.dip2pixel(getActivity(), 6), Utils.dip2pixel(getActivity(), 6));            lp.rightMargin = Utils.dip2pixel(getActivity(), 8);            view.setLayoutParams(lp);            view.setBackgroundResource(R.drawable.selector_indicator_view);            view.setSelected(i == 0);            llIndicatorView.addView(view);        }    }  private void initBannerView() {        bannerView.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {             }             @Override            public void onPageSelected(int position) {                // 手滑动到某一位置,重新开始计时                realPosition = 0;                realPosition = position % getUrlList().size();                // 根据当前滑动到的banner设置指示器的状态                for (int i = 0; i < llIndicatorView.getChildCount(); i++) {                    llIndicatorView.getChildAt(i).setSelected(i == realPosition);                }                start();            }             @Override            public void onPageScrollStateChanged(int state) {             }        });    }

附:Utils文件

public class Utils {    public static void setFullScreen(Activity activity) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);        }    }     public static int dip2pixel(Context context, float n) {        int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, n, context.getResources().getDisplayMetrics());        return value;    }         public static int getScreenWidth(Context context) {        WindowManager wm = (WindowManager) context                .getSystemService(Context.WINDOW_SERVICE);        DisplayMetrics outMetrics = new DisplayMetrics();        wm.getDefaultDisplay().getMetrics(outMetrics);        return outMetrics.widthPixels;    }}

“android viewpager怎么实现轮播效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: android viewpager怎么实现轮播效果

本文链接: https://lsjlt.com/news/341657.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • android viewpager怎么实现轮播效果
    本篇内容介绍了“android viewpager怎么实现轮播效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!分为四步去实现:第...
    99+
    2023-07-02
  • android viewpager实现轮播效果
    本文是基于ViewPager实现的无限自动轮播banner,供大家参考,具体内容如下 分为四步去实现: 第一步是有限手动轮播; 第二步是无限轮播; 第三步是自动轮播; 第四步是指示...
    99+
    2024-04-02
  • Android ViewPager实现轮播图效果
    先上一张效果图: 说到ViewPager实现轮播图效果,那么肯定会用到PagerAdapter,下面先介绍下这个类。 PagerAdapter简介 PagerAdapter是...
    99+
    2022-06-06
    轮播图 viewpager 轮播 Android
  • android使用ViewPager实现轮播效果
    ViewPager:一个可以实现视图左右滑动切换的控件。 ViewPager的基本使用: ViewPager的视图需要通过PagerAdapter来实现显示。 Pager...
    99+
    2022-06-06
    viewpager 轮播 Android
  • Android ViewPager实现图片轮播效果
    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设...
    99+
    2022-06-06
    图片 viewpager 轮播 Android
  • Android ViewPager实现图片轮翻效果
    很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小...
    99+
    2022-06-06
    图片 viewpager Android
  • Android实现轮播图效果
    本文实例为大家分享了Android实现轮播图效果的具体代码,供大家参考,具体内容如下 1.代码放在LinearLayout中, <com.jude.rollviewpage...
    99+
    2024-04-02
  • Android 使用ViewPager实现左右循环滑动及轮播效果
    ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验。...
    99+
    2022-06-06
    循环 viewpager 轮播 Android
  • Android实现图片轮播效果
    本文实例讲述了JaAndroid实现图片轮播效果代码,分享给大家供大家参考。具体如下: 运行效果截图如下: 具体代码如下: 首先看下一下布局文件: <Relative...
    99+
    2022-06-06
    图片 轮播 Android
  • Android实现视图轮播效果
    最近接手了一个需求,要求实现,叮咚买菜。 秒杀位置的轮播 拆解 通过观察发现其实还是挺简单,大致分为 1、商品图片的上下轮播 2、价格布局渐隐渐现 在android上实现布局轮播,...
    99+
    2024-04-02
  • Android使用ViewPager实现自动轮播
    很多APP中都实现了类似引导页的自动轮播,不由得想到昨天的引导页上修改一下代码实现轮播。 其实大体上只需要添加一个线程循环执行就可以了。  项目已同步至:https...
    99+
    2022-06-06
    自动 viewpager 轮播 Android
  • Android ViewPager如何实现无限循环轮播广告位Banner效果
    这篇文章将为大家详细讲解有关Android ViewPager如何实现无限循环轮播广告位Banner效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在一些app通常会在头部放一个广告位,底部放置一行小...
    99+
    2023-05-30
    android viewpager banner
  • android如何实现banner轮播图无限轮播效果
    小编给大家分享一下android如何实现banner轮播图无限轮播效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下效果展示第一步(权限配置)<uses-permission android:n...
    99+
    2023-05-30
    android banner
  • Android 使用ViewPager自动滚动循环轮播效果
    对Android 利用ViewPager实现图片可以左右循环滑动效果,感兴趣的朋友可以直接点击查看内容详情。 主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用。...
    99+
    2022-06-06
    循环 viewpager 轮播 Android
  • Android viewpager自动轮播和小圆点联动效果
    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下首先来看一下我们要做成的而效果:主页面要显示一个viewpager自动轮播+小圆点联动的效果 : 废话不多说,直接上代码:布局文件: activity_ma...
    99+
    2023-05-30
    android 轮播 viewpager
  • Android中用RxJava和ViewPager实现轮播图
    前言 很多人要实现轮播图都会想到使用ViewPager + Handler来完成轮播图的效果。但是在RxJava快速发展的情况下,已经可以使用RxJava来代替Handler完...
    99+
    2022-06-06
    rxjava 轮播图 viewpager 轮播 Android
  • android ViewPager实现一个无限轮播图
    上节我们实现了一个图片可以无限滑动的ViewPager,这一节我们需要自定义一个ViewPager来实现我们想要展现的布局 首先我们需要建一个包,然后新建一个java类,名字随便起 ...
    99+
    2024-04-02
  • css怎么实现轮播图效果
    这篇文章主要介绍css怎么实现轮播图效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在css中,可以使用“@keyframes”规则和“animation”属性定义动画来实现轮播图切换效果。动画是使元素从一种样式逐...
    99+
    2023-06-14
  • Android UI实现广告Banner轮播效果
    本篇博客要分享的一个效果是实现广告Banner轮播效果,这个效果也比较常见,一些视频类应用就经常有,就拿360影视大全来举例吧:   用红框框住的那个效果就是小巫今天...
    99+
    2022-06-06
    Android
  • Android实现广告图片轮播效果
    本文实例介绍了Android广告轮播图效果实现方法,分享给大家供大家参考,具体内容如下 首先看下一下布局文件: <RelativeLayout xmlns:andro...
    99+
    2022-06-06
    图片 广告 轮播 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作