android轮播图的实现

Android开发-轮播图的详细实现 实现不添加任何依赖自己实现轮播图,使用ViewPager和布局容器来实现轮播的功能 综合了网上几位博主的文章,这里提供最直接最明了的实现。 实现效果如下,这里只是简单的实现,以后有机会再改进,也欢迎大家来指导我。 1. 万事先改布局呗,activity_main.xml: <FrameLayout xmlns:android="http://schemas.android.com/... 阅读详情

轮播图是通过ViewPager实现,轮播效果在子线程中通过handler机制设置viewPager显示的Item

public class HomeScrollViewFragment extends Fragment {
//这里使用的是ScrollView组件,配合Fragment

    private ObservableScrollView mScrollView;
    private View mView;
    private ViewPager mSlidingShow;
    private MyClickListener mListener;
    private SlidingShowAdapter mSlidingShowAdapter;
    private List<Image> mSlidingImages;
    private BitmapUtils mBitmapUtils;
    private int pointSelectIndex;
//测试用的图片URL
    String imgPaths[]={"http://pic.baike.soso.com/p/20130802/20130802214330-825586008.jpg",
        "http://img03.tooopen.com/uploadfile/downs/images/20110811/sy_20110811170230819021.jpg","http://img.zcool.cn/community/03396a3554c74f700000158fc16b02b.jpg",
        "http://rios.co/wp-content/uploads/2012/11/rioswing_diy_field_02.jpg",
        "http://abc.2008php.com/2012_Website_appreciate/2012-06-24/20120624160018.jpg"

};
    private LinearLayout mLl_ponits;
    private int mPotinIsSelect;
    private SlidingShow mMySliding;

    public static HomeScrollViewFragment newInstance() {
        return new HomeScrollViewFragment();}

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_home_scrollview, container, false);
        initView();
        return mView;
    }

    private void initView() {
     //轮播图findViewByid
        mSlidingShow = (ViewPager) mView.findViewById(R.id.home_slidingShow);
        mBitmapUtils = new BitmapUtils(getActivity().getApplicationContext());
        mBitmapUtils.configDefaultBitmapConfig(Bitmap.Config.ARGB_4444);//设置一个字节的像素
        mLl_ponits = (LinearLayout) mView.findViewById(R.id.ll_home_piont);//轮播图上的点
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mScrollView = (ObservableScrollView) view.findViewById(R.id.scrollView);
        MaterialViewPagerHelper.registerScrollView(getActivity(), mScrollView, null);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mMySliding = new SlidingShow();//创建轮播图类
        setData();//设置数据
        initEvent();//设置事件
    }

/**
这是一个私有内部类,封装了轮播图的功能,该类继承了handler实现了Runnable接口
**/
    private class SlidingShow extends Handler implements Runnable{
    //停止轮播的方法
     public void stopSlidingShow(){
         removeCallbacksAndMessages(null);
     }
     //开始轮播的方法
     public void startSlidingShow(){
         postDelayed(this,5000);
     }

     //轮播的逻辑要放在子线程中实现
    @Override
    public void run() {
        //每隔5秒设置viewPager的当前页面一次   mSlidingShow.setCurrentItem((mSlidingShow.getCurrentItem()+1)%mSlidingShow.getAdapter().getCount());
        postDelayed(this,5000);
    }
}

    //设置数据

    private void setData() {
        setSlidingShowData();
        initPoints();
        setPotinIsSelect(pointSelectIndex);
        mMySliding.startSlidingShow();//开启轮播图
    }
//设置轮播图上的点
    private void initPoints() {
        mLl_ponits.removeAllViews();
        for(int i=0;i<5;i++){
            View v_point=new View(getActivity().getApplicationContext());
            v_point.setBackgroundResource(R.drawable.selector_point);
            v_point.setEnabled(false);//默认都是灰色点
            //设置圆点的半径为5个dip
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(DensityUtils.dipToPx(getActivity(), 5), DensityUtils.dipToPx(getActivity(), 5));
            layoutParams.leftMargin=DensityUtils.dipToPx(getActivity(),10);//将dip转换成px
            v_point.setLayoutParams(layoutParams);
            mLl_ponits.addView(v_point);//将点将在布局上

        }
    }

    /**
     * 轮播图的适配操作
     */
    private void setSlidingShowData() {
        mSlidingShowAdapter = new SlidingShowAdapter();//创建适配器对象
        mSlidingShow.setAdapter(mSlidingShowAdapter);//设置适配器
    }
//设置轮播图上的点是否选中
    public void setPotinIsSelect(int potinIsSelect) {
        for (int i=0;i<5;i++){
            mLl_ponits.getChildAt(i).setEnabled(i==pointSelectIndex);
        }
    }

    /**
     * 轮播图的适配类
     */
private  class SlidingShowAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return 5;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView iv_SlidingImage=new ImageView(getActivity().getApplicationContext());
//            设置默认图片
            iv_SlidingImage.setImageResource(R.drawable.defualt);
            //给图片添加数据
//            mSlidingShowDatas.get(position);
            //Xutils的BitMap异步加载图片并显示
            mBitmapUtils.display(iv_SlidingImage,imgPaths[position]);
            container.addView(iv_SlidingImage);
//            给图片添加点击事件,在图片轮播的时候,用户按住图片可停止播放松开继续播放
            iv_SlidingImage.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    switch (motionEvent.getAction()){
                        case MotionEvent.ACTION_DOWN://按下
                            mMySliding.stopSlidingShow();
                            break;
                        case MotionEvent.ACTION_UP://松开
                            mMySliding.startSlidingShow();
                            break;
                        case MotionEvent.ACTION_CANCEL://取消
                            mMySliding.startSlidingShow();
                            break;
                        default:
                            break;

                    }
                    return true;
                }
            });
            return iv_SlidingImage;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }
    }
    /**
     * 点击事件
     */
    private void initEvent() {
        //轮播图
        mSlidingShow.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                //当滑动到此页面时,设置点被选中
                pointSelectIndex=position;
                setPotinIsSelect(position);

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }
}


public class DensityUtils {
    //根据手机的分辨率将dip转化成px
    public static int dipToPx(Context context,float dpValue){
        float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
        return (int)(scaledDensity*dpValue+0.5f);
    }
    //根据手机的分辨率将px转化成dip
    public static int pxToDip(Context context,float pxValue){
        float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
        return (int)(pxValue/scaledDensity+0.5f);
    }

}


xml

  <android.support.v4.view.ViewPager
                    android:layout_width="match_parent"
                    android:background="@color/left_textView_select"
                    android:id="@+id/home_slidingShow"
                    android:layout_height="@dimen/home_viewpager_height">
                </android.support.v4.view.ViewPager>
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/ll_home_piont"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="144dp"
                    android:orientation="horizontal">
                </LinearLayout>
安卓最简单的轮播图实现无限轮播 Android中的轮播图实现起来并不难,现在特别是商城类的APP中使用的特别多,自定义view和ViewPager都能很简单的实现,之前找了几篇博文都不具备无限轮播的功能,现在自己实现了无限轮播的功能,供大家参考学习和使用~~~~ 先看效果图: 下面就看一下具体的代码实现: 先看一下布局代码 activity_main.xml <RelativeLayout 阅读详情

相关推荐

安卓实现轮播图

安卓实现轮播图 一、实现纯颜色作为背景的轮播图 1.首先在主活动的xml文件下面添加一个ViewPager <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/ap

twenty_four_7的博客 7498

android图片轮播

对于高度定制化的需求,你可以通过自定义View的方式来实现图片轮播。这种方法需要你深入了解Android的绘图机制和事件处理机制,通过重写View的onDraw()等方法来绘制图片和实现轮播逻辑。不同的实现方法适用于不同的场景和需求。例如,如果你需要高度定制化的轮播效果,可能需要自定义View;而如果你需要快速集成轮播图功能,使用第三方库可能是最简便的方法。在选择实现方式时,应根据项目需求、开发时间和资源等因素进行综合考虑。

xie__jin__cheng的博客 1605

对于Android Studio的轮播图的实现

对于Android Studio的轮播图的实现 由于本人经常忘记一些代码,现开始写博客进行基础的代码记录,为以后的编写提供一定的帮助。 1.在XML界面建立一个ViewFlipper,其中添加ImageView(要轮播多少图片就添加多少个ImageView)。 <ViewFlipper android:id="@+id/flipper" android:layout_width="match_parent" android:layout_height=

qq_41072195的博客 1万+

android中怎么实现轮播图,Android中轮播图的实现

在Android中想要实现轮播图,会用到ViewPager和其子控件PagerTabStrip(标题栏)怎么样一步一步的去做到:1.将View视图添加到集合中public class MyActivity extends Activity{ViewPager viewPager;View view_a,view_b,view_c;ListviewList;PagerTabStrip pts;Arr...

weixin_35817939的博客 3156

android中轮播图的实现

android的轮播图实现有多种方法,首先可以用gallery,不过这种fang

xiIxiaohe的专栏 7035

安卓实现无限轮播 最简单的轮播图

安卓实现无限轮播 最简单的轮播图 Android中的轮播图实现起来并不难,现在特别是商城类的APP中使用的特别多,自定义view和ViewPager都能很简单的实现,之前找了几篇博文都不具备无限轮播的功能。 供大家参考学习和使用

手机App上的轮播图是如何实现的—探究安卓轮播图

ViewPager2基于RecyclerVIew有着更好的性能,尽管在使用上对开发者来说较ViewFlipper更为繁琐,但是这对于app的性能是值得的。除了少数情况下轮播内容仅限于极简单的内容,更多时候仍然推荐以ViewPage2的形式实现轮播图。

2401_86909484的博客 839

Android开发之轮播图广告的实现

目前来说各大流行的商城app都会有轮播图这个功能,有的可以一直循环轮播,有的只能手动轮播,今天我们就来打造属于我们自己的轮播图!

安卓viewpager实现轮播图

instantiateItem用于在viewpager的指定页面插入新的视图,我的代码中,我创建了ImageVIew控件,通过每次滑动时取position%imgList.length来实现图片无限轮播的效果,这样就不会使得向后或者向前滑动的时候没有内容了,然后通过container.addView将我创建的ImageView控件放到viewpager组件里面。设置以上方法后便可以实现轮播图的滑动,但是在实际的应用中,往往还设置了banner的自动轮播,所以我又添加了自动轮播的方法。以下是我个人的方法。

fjnu_se的博客 989

史上最简单Android图片轮播效果实现 源码程序

这个Android示例用最简单的方式实现了图片轮播效果,具体实现细节请阅读博文:http://blog.youkuaiyun.com/l1028386804/article/details/48049913

Android-YCBanner轮播图支持多种自定义属性可以设置轮播红点或者轮播数字

轮播图,支持多种自定义属性,可以设置轮播红点或者轮播数字,支持设置引导页。可以根据不同使用场景,可以选择无限循环,静态管理或者动态管理adapter。还可以设置暂停和开始轮播。

android轮播图实现方案,Android轮播图实现教程

ListView的headerView设置为轮播图之后结合上/下拉刷新/加载的模式成为现在大多数APP的一个必须具备的功能,对于许多初学者来说想要实现轮播图这样一个集线程睡眠、自动处理、替换过程中刷新UI界面的组合功能非常困难,没有思路,感觉无从下手,去搜索各种实现方案,发现目前充斥着大量的类似于使用弃用组件Gallery这样的例子。本篇博客将通过分析轮播图的各个注意事项及实现思路来实现一个简易的...

weixin_42567279的博客 3405

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案

根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1484

安卓首页界面:用Banner框架实现Android轮播图效果

1111

qq_68469751的博客 4066

Comsol 管道导波裂纹检测:从建模到求解的完整流程解析

本文详细解析了使用Comsol Multiphysics进行管道导波裂纹检测的完整仿真流程。从几何建模、材料定义、物理场设置到网格划分与求解后处理,系统阐述了如何构建高保真虚拟模型以模拟导波与裂纹的相互作用。重点分享了激励信号设置、频散效应处理及参数化扫描等实战技巧,旨在帮助工程师与研究人员高效优化无损检测方案,降低实验成本。

weixin_29207439的博客 74

centos+apache+subversion+LDAP

yum install subversion 报错:[Errno 14] HTTP Error 416 - Requested Range Not Satisfiable 正在尝试其它镜像。 zaici

qq_41566366的博客 1544

Android实现轮播图效果

Android实现轮播图效果 (1)参考资料 资料:https://github.com/daimajia/AndroidImageSlider (2)Step1:导入依赖 implementation "com.android.support:support-v4:+" implementation 'com.squareup.picasso:picasso:2.3.2' implem...

LoveStarbucks的博客 827

RK3568平台开发系列讲解(NPU篇)什么是RKNPU

📢本篇章将介绍RKNPU。

内核笔记 4354

Android轮播图的实现

Android轮播图的实现这几天看了《Android开发艺术探索》这本书真的是挺不错的,学了自定义View之后打算动手实践一个轮播图控件,网上有很多实现的方法,我最后实现起来跟他们也基本上都是大同小异,主要我也是为了练练动手能力。先来个效果图,图片是在百度搜的正经图片 分析实现轮播图的方式大体上我看到了三种,一是使用安卓的Gallery控件来实现,二是使用HorizontalScrollView,

humorousz的专栏 3054

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 377

Android ViewPager实现循环轮播图

一、原理ViewPager是Android中使用频率相对较高的view组件,同时对滑动过程中的事件进行了处理,因此非常适合轮播图。关于轮播图的实现,有很多方法,使用HorizontalView或者RecylerView也可以实现,但是需要处理fling操作,这里我们用ViewPager避免这些工作。 网上有很多关于ViewPager轮播的轮播实现,其原理大多数给PagerAdapter的getCo...

weixin_33709590的博客 159

nRF52832——大量数据传输时导致蓝牙断开连接,且无法被搜索到的解决方案(广播参数的设置、程序设计方法)

有时蓝牙通信单次发送数据量较大,且连续发送多次的时候,你会发现蓝牙就会出现异常,可能运行30min,40min,或者1h后,蓝牙就不能传输数据了,且无法被搜索到,用主机扫描蓝牙时可能会提示类似这样的DEBUG信息:bta_gattc_mark_bg_conn unable to find the bg connection mask for bd_addr=xx:xx:xx:xx:xx:xx。

数字世界 万物互联 2005

android简单实现轮播图效果

利用android的ViewPage实现轮播图效果,ViewPager实现的轮播图广告自定义视图,既支持自动轮播页面也支持手势滑动切换页面。原理也不难,在代码有详细的解释。 一 样式布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="

码猿同学 7133

Python爬取马蜂窝旅游攻略详细实战指南

马蜂窝是国内非常知名的旅游攻略网站,包含了大量的景点介绍、旅行攻略、游记等信息。爬取马蜂窝的数据对于旅游数据分析、旅游产品推荐等有重要价值。但由于马蜂窝对爬虫有一定的反爬措施,并且页面中大量内容通过JavaScript动态加载,爬虫难度相对较大。本篇博客将带你从零开始,使用Python和相关爬虫技术,逐步实现对马蜂窝旅游攻略内容的高效爬取。并结合实战经验,分析反爬策略,提供科学合理的绕过方案。本文介绍了马蜂窝攻略的结构和抓取难点。演示了静态+动态内容的混合爬取技术。介绍了多线程和异步加速方法。

2201_76125261的博客 588

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: android笔记之SQLite 数据库操作
下一篇: MateriaViewPager--漂亮的开源框架
codelady
博客等级 码龄11年 26粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值