hersonX / CarouselFigureView

轮播图的简单实现

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#一、简介

CarouselFigureView是一个支持自动切换、无限循环的轮播图控件。其主要作用就是实现项目当中的轮播图。 CarouselFigureView有很强的适配性,可满足基本上所有的轮播图需求。 你可以在代码中随意禁用自动切换、无限循环功能,也可以隐藏指示点。

轮播图图片 #二、版本 2016.5.17-v1.0.0 1、项目完成 2016.5.24-v1.1.0 1、修复刷新时指示点翻倍bug 2、现在可在使用代码动态控制循环、自动切换、指示点显示 3、startLoad()私有,在设置数据时将自动调用

#三、使用 androidStudio可直接引用,支持maven()和jcenter()

compile 'com.github.z593492734:carouselfigureview:1.1.0'

#四、详解-使用必读

###1、属性 以下全为自定义属性:

isAutoPlay:              是否支持自动切换,boolean值

isInfiniteLoop:          是否支持无限循环,boolean值  

pointLeft_Right_Margin:   指示点的左右间距,为了保证指示点居中,这个间距将会设置给左右两边,
                          所以如果您需要10dp的间距,您仅需将该属性设置为5dp即可     
                          
isNeedIndicationPoint:    是否需要指示点,boolean值

playIntervalTime:         轮播图的切换时间,单位毫秒,默认为3秒

pointBottomMargin:       指示点距离下方的距离

pointBackground:         指示点的背景,内容为资源文件,这里如果需要自定义背景,需要提供selector文件,
                          并在其中给予state_selected=true 以及state_selected=false两种状态的背景,                 
                          稍后提供代码
imgPlaceholderResource:   设置图片加载过程中占位图片                  

##2、方法:

setURL(List<String> urlList)                
    设置数据,数据为url集合
    
setResourceList(@DrawableRes List<Integer> resourceList)  
    设置数据,数据为resource文件

setViewPagerSwitchStyle(ViewPager.PageTransformer transformer) 
    自定义ViewPager的切换方式
    
startLoad()     
    显示轮播图,在设置数据之后调用该方法,注意必须在此之前设置数据,否则会抛出异常
    
setViewPagerSwitchSpeed(int switchSpeed)
        自定义ViewPager的切换动画速度,单位是毫秒,注意切换动画速度一定要快于轮播图展示时间。并且轮播图
        真实的展示时间= playIntervalTime(设置的轮播图切换间隔) - switchSpeed(切换动画速度)
        
setCarouselFigureItemClickListener(CarouselFigureItemClickListener listener)
        条目的点击事件,包含view 以及 position两个参数。
        position的最大值等于数据长度-1,所以可以直接使用,不需要做取余等处理。
setAutoPlayState(boolean flag)
        是否开启自动切换功能,true开启反之关闭
setInfiniteLoopState(boolean flag)
        是否开启无限循环功能,true开启反之关闭
setIndicationPointState(boolean flag)
        是否显示指示点,true显示反之隐藏

###3、demo代码: ####布局文件:

    <?xml version="1.0" encoding="utf-8"?>
        <com.my.view.CarouselFigureView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:mengyuan="http://schemas.android.com/apk/res-auto"
            android:id="@+id/carousel_figure_view"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            mengyuan:isAutoPlay="true"
            mengyuan:isInfiniteLoop="true"
            mengyuan:isNeedIndicationPoint="true"
            mengyuan:playIntervalTime="4000"
            mengyuan:pointBottomMargin="3dp"
            mengyuan:pointLeft_Right_Margin="5dp"
            mengyuan:pointBackground="@drawable/point_bg_test"
        />

####activity:

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          carouselFigureView = (CarouselFigureView) findViewById(R.id.carousel_figure_view);
          ArrayList<String> url = new ArrayList<>();
          url.add("http://o.ypgimg.com/content/2016/5/16/3b61698c-cf8b-4abe-9c39-d474b454d790.jpg");
          url.add("http://o.ypgimg.com/content/2016/5/16/88d50d38-09fb-4d3e-bd0c-fc52e2a26c74.jpg");
          url.add("http://o.ypgimg.com/content/2016/5/16/e5a7b0e3-1a21-4e66-adc8-17a1b7c1a92f.jpg");
          url.add("http://o.ypgimg.com/content/2016/5/16/8bae5357-d542-4e52-ad5f-ad7d021fc163.jpg");
        //可使用setURL()或者setResourceList(),两者必选其一
        //除了该方法,其余均为可选
          carouselFigureView.setURL(url);
          //设置自定义style,我提供了goole官方的两种动画,可以直接使用
          //new DepthPageTransformer() 
          //new ZoomOutPageTransformer()
          carouselFigureView.setViewPagerSwitchStyle(new DepthPageTransformer());
          //设置切换动画的持续时间
          //::::::注意::::::
          //该时间一定要小于轮播图切换时间
          carouselFigureView.setViewPagerSwitchSpeed(500);
          //点击事件
 carouselFigureView.setCarouselFigureItemClickListener(new CarouselFigureView.CarouselFigureItemClickListener() {
            @Override
            public void onClick(View view, int position) {
                Toast.makeText(MainActivity.this,"position:"+position,Toast.LENGTH_SHORT).show();
            }
        });
      }
      

####最后,贴一下指示点背景,在res/drawable文件下 ####point_seclted.xml

<?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="oval">
          <size
              android:width="10dp"
              android:height="10dp" />
          <solid android:color="@android:color/white" />
          <stroke
              android:width="1dp"
              android:color="@android:color/white" />
      </shape>

####point_unselected.xml

    <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="oval">
          <size
              android:width="10dp"
              android:height="10dp" />
          <solid android:color="@android:color/transparent" />
          <stroke
              android:width="1dp"
              android:color="@android:color/white" />
    </shape>

####真正设置为指示点背景的文件:point_bg.xml

<?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/point_unselect" android:state_selected="false"/>
    <item android:drawable="@drawable/point_select" android:state_selected="true"/>
      </selector>

希望这个demo可以在大家实现轮播图的时候有帮助 第一个版本,我做了很多的测试,但我相信还是存在隐患 并且功能也不能满足所有人 有任何问题或建议欢迎大家给我留言:mengyuanzz@126.com

About

轮播图的简单实现


Languages

Language:Java 100.0%