banner无限轮播

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp">

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" />

        <LinearLayout
            android:id="@+id/dotLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="20dp"
            android:gravity="center"
            android:orientation="horizontal" />

    </RelativeLayout>

</RelativeLayout>

selecter.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <shape android:shape="oval">
            <size android:height="10dp" android:width="10dp"></size>
            <solid android:color="#aa000000"></solid>
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape android:shape="oval">
            <size android:height="10dp" android:width="10dp"></size>
            <solid android:color="#aaffffff"></solid>
        </shape>
    </item>
</selector>
public class MainActivity extends AppCompatActivity {

    private List<ImageView> list;
    private LinearLayout dotLayout;
    private int prePosition;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        initView();
        //开启一个新线程,实现ViewPager的自动滚动
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //runOnUiThread中的代码运行在主线程中
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                        }
                    });
                }
            }
        }).start();
    }

    private void initView() {
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        //构造适配器
        MyAdapter adapter = new MyAdapter(list);
        //设置Adapter
        viewPager.setAdapter(adapter);
        //设置ViewPager预加载的页数
//        viewPager.setOffscreenPageLimit(2);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //ViewPager滑动过程中调用
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            //ViewPager新页面确定后调用
            @Override
            public void onPageSelected(int position) {
                //设置前一个View为白色
                dotLayout.getChildAt(prePosition).setEnabled(false);
                //设置当前View为红色
                dotLayout.getChildAt(position % list.size()).setEnabled(true);
                //将当前位置赋给prePosition
                prePosition = position % list.size();
            }

            //ViewPager滑动状态改变后调用
            //0--静止状态
            //1--手在拖动
            //2--手松开后自动滑动
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        //设置ViewPager的初始item
        viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - 3);
    }

    /**
     * 构造数据源
     */
    private void initData() {
        dotLayout = (LinearLayout) findViewById(R.id.dotLayout);
        list = new ArrayList<>();
        int[] imgs = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};
        for (int img : imgs) {
            //使用Java代码创建一个ImageView
            ImageView imageView = new ImageView(this);
            //设置图片以及ScaleType属性
            imageView.setImageResource(img);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            list.add(imageView);

            //创建一个View对象
            View view = new View(this);
            //设置View的宽和高
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()));
            //设置View左边距,避免View连在一起
            params.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, getResources().getDisplayMetrics());
            view.setLayoutParams(params);
            //设置背景颜色,背景使用selector,可使View在不同状态显示不同颜色
            view.setBackgroundResource(R.drawable.dot_radiobutton_style);
            //默认状态下View的Enable属性为false(View全为白色)
            view.setEnabled(false);
            //将View添加进LinearLayout中
            dotLayout.addView(view);
        }
        //第一个View默认为红色
        dotLayout.getChildAt(0).setEnabled(true);
    }

}
时间: 2024-08-26 21:17:43

banner无限轮播的相关文章

无限轮播的实现,未加自动轮播效果(非原创)

最近一直在看视频,学到了一个无限轮播,今天把它给写下来保存,方便日后自己查阅. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="keywords" content=""> 6 <meta name="description" content="

ViewPager实现无限轮播踩坑记

最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对我的解决方法,有啥更好的方案,欢迎和我分享 使用ViewPager实现无限轮播代码 MainActivity代码 public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private T

iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView 使用原理:采用UICollectionView的重用机制和循环滚动的方式实现图片的无限轮播,播放非常顺畅,解决了UISCrollView使用时从最后一张跳到第一张时的生硬状态. 主要类截图: SDCollectionViewCell:用来重用的item,即显示图片的视图: SDCycleScrollView: 对外提供的一个创建轮播器的接口类,使用者就是直接使用这个类来实现

iOS无限轮播视图

以前曾经写过一个用UICollectionView的无限轮播视图,但是写法不是很成熟,设置模型上限为数组的count * 50这样做的话会滚动到最后一个模型的时候会crash掉,今天理了下思路,写了一个基于UISCrollView的轮播视图,虽然比较简陋,但是实现了基本功能.没有怎么加入注释,请谅解效果图如下: 有兴趣的可以去参考一些代码,附上GitHub地址:https://github.com/zimou47/UnlimitedScrollView 如果为您带来了帮助,请点一颗星O(∩_∩)

iOS开发UI篇—无限轮播(循环利用)

一.无限轮播  1.简单说明 在开发中常需要对广告或者是一些图片进行自动的轮播,也就是所谓的无限滚动. 在开发的时候,我们通常的做法是使用一个UIScrollView,在UIScrollView上面添加多个imageView,然后设置imageView的图片,和scrollView的滚动范围. 以前的做法: 一般而言,轮播的广告或者是图片数量都不会太多(3~5张).所以,并不会太多的去考虑性能问题.但是如果图片过多(比如有16张图片,就需要创建16个imageView),那么就不得不考虑性能问题

无限轮播图的制作

url:http://zjingwen.github.io/SetTimeOutGoBlog/webdemo/huanyouji/index.html (如果打开过慢,或者打不开,原因你懂得.) 一.思路 1.所有滑动效果的demo都是通过控制css里的left值,来控制滑动效果的. 2.需要两个块,一个div块,一个ui.div块的position是relative,ui块的position是absolute.这样ui块的left就可以根据外层的div来控制.div的overflow是hidd

iOS开发UI篇—无限轮播(功能完善)

iOS开发UI篇—无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. 1 [self addNSTimer]; 2 } 3 4 -(void)addNSTimer 5 { 6 // NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repe

新版无限轮播视图,2个imageView完成(不依赖任何三方库)

笔者最新改写的无限轮播视图,完全不依赖任何三方库,2个imageView实现无限轮播. 特点: 1.支持图片缓存到本地,亦支持一键清除缓存. 2.超级轻量,没有任何第三方框架参合,占用内存极小 3.高度自定义,支持修改pageControll的显示图片及显示位置 4.图片展示模式多样性,支持轮播展示与渐入渐出模式展示 5.支持自动滚动 6.创建方式多样,支持代码及storyboard创建 7.支持显示图片简介,具体见GitHub效果图 代码实现: .h // // WYScrollView.h

iOS开发之ImageView复用实现图片无限轮播

在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageView进行交替切换来实现图片的无限轮播,在轮播时去修改ImageView上的图片.上一篇博客中是有几张图片就实例化几个ImageView, 然后事先把Image贴到相应的ImageView上,这种做法比较简单,而且易于实现. 今天这篇博客就要实现使用两张ImageView, 交替的区展示Image,