Android UI Libs之CircleIndicator
1. 說(shuō)明
CircleIndicator蜂奸,顧名思義犁苏,圓形指示器,只一個(gè)可以用來(lái)做輪播的第三方庫(kù)扩所。
2. 配置
在模塊的build.gradle中添加依賴(lài):compile 'me.relex:circleindicator:1.2.1@aar'
3. 基本使用
在xml布局文件中定義ViewPager
與CircleIndicator
:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="150dp">
</android.support.v4.view.ViewPager>
<me.relex.circleindicator.CircleIndicator
android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="48dp"/>
</RelativeLayout>
注意:ViewPager
與CircleIndicator
一般放在同一個(gè)RelativeLayout
中围详,并且CircleIndicator
放在后面
在java文件中的相關(guān)操作:
this.indicator = (CircleIndicator) findViewById(R.id.indicator);
this.viewpager = (ViewPager) findViewById(R.id.view_pager);
List<Fragment> list=new ArrayList<>();
myFragment1 = new MyFragment(R.drawable.image1);
myFragment2 = new MyFragment(R.drawable.image2);
myFragment3 = new MyFragment(R.drawable.image3);
list.add(myFragment1);
list.add(myFragment2);
list.add(myFragment3);
MyPagerAdapter myPagerAdapter=new MyPagerAdapter(getSupportFragmentManager(),list);
viewpager.setAdapter(myPagerAdapter);
indicator.setViewPager(viewpager);
MyFragment
是我自定義的Fragment,它里面包含一個(gè)ImageView
祖屏,MyPagerAdapter
是我自定義的Adapter助赞。
程序運(yùn)行界面:
我們發(fā)現(xiàn)可以輪播,但是不能循環(huán)袁勺,我們想要循環(huán)怎么辦雹食,別擔(dān)心,下一節(jié)我們來(lái)實(shí)現(xiàn)循環(huán)輪播期丰。
CircleIndicator
還有下面一些屬性群叶,屬性命名很規(guī)則,一看名字就知道屬性是干什么的:
- app:ci_width:
- app:ci_height
- app:ci_margin
- app:ci_drawable
- app:ci_drawable_unselected
- app:ci_animator
- app:ci_animator_reverse
- app:ci_orientation (default:horizontal)
- app:ci_gravity (default:center)
4. 高級(jí)使用
該庫(kù)的LoopingViewPager目錄下面為我們提供了循環(huán)的ViewPager钝荡,我們需要將其中的LoopPagerAdapterWrapper
街立,LoopViewPager
這兩個(gè)類(lèi)復(fù)制到我們的項(xiàng)目中來(lái)就。然后要將android.support.v4.view.ViewPager
改為com.lavor.circleindicatordemo.LoopViewPager
埠通。
- 當(dāng)我們的Adapter是繼承自
FragmentPagerAdapter
時(shí)赎离,無(wú)法使用該循環(huán)的ViewPager(即LoopViewPager
) - 當(dāng)我們的Adapter是
SamplePagerAdapter
時(shí),SamplePagerAdapter
是該庫(kù)實(shí)例中的一個(gè)Adapter時(shí)植阴,可以循環(huán)輪播蟹瘾,但是明顯從最后一個(gè)滑動(dòng)到第一個(gè)時(shí),第一頁(yè)顯示了兩次掠手,貌似利用該庫(kù)中的LoopViewPager
還無(wú)法解決這個(gè)問(wèn)題憾朴。
**我們要實(shí)現(xiàn)循環(huán)輪播的最佳解決方案: **
- 利用另一個(gè)庫(kù)LoopViewPager下面的
LoopViewPager
- 修改CircleIndicator下面
CircleIndicator
的源代碼,將setViewPager(ViewPager viewPager)
方法中的ViewPager
改為上面所提庫(kù)中的LoopViewPager
喷鸽,并將與之關(guān)聯(lián)的ViewPager
都改為上面所提庫(kù)中的LoopViewPager
众雷,其他關(guān)聯(lián)代碼對(duì)應(yīng)改過(guò)來(lái)。
程序運(yùn)行后的界面:
程序源代碼下載做祝,我的github倉(cāng)庫(kù):UILibs