廣告輪播條的重要性不言而喻。在不少類型app中出場率都很高。java
今天給你們介紹一個輪播圖開源項目,這個項目把輪播圖須要的ViewPager跟計時器作了封裝,使用極其方便,支持gradle在線依賴。還封裝了幾種圖片滑動動畫。android
無圖無真相:git
有10多種滑動動畫,跟兩種滾動狀態。能知足大部分需求。github
首先在線依賴三個庫網絡
compile 'com.squareup.picasso:picasso:2.3.2' compile 'com.nineoldandroids:library:2.4.0' compile 'com.daimajia.slider:library:1.1.5@aar'
Picasso是Square公司出品的一款很是優秀的開源圖片加載庫,是目前Android開發中超級流行的圖片加載庫之一。nineoldandroids也是github比較有名的開源動畫庫,咱們這個圖片滑動動畫就是基於這個動畫庫。slider就是Banner開源庫了。基於前面的Picasso跟nineoldandroids才達到效果。app
須要在AndroidManifest.xml中加入訪問網絡權限。畢竟圖片有可能給一個url在線顯示。ide
<uses-permission android:name="android.permission.INTERNET" />
activity_main.xml 首頁佈局文件函數
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp"> <com.daimajia.slider.library.SliderLayout android:id="@+id/slider" android:layout_width="match_parent" android:layout_height="200dp" custom:auto_cycle="true" custom:indicator_visibility="visible" custom:pager_animation="Accordion" custom:pager_animation_span="1100" /> <com.daimajia.slider.library.Indicators.PagerIndicator android:id="@+id/custom_indicator2" style="@style/AndroidImageSlider_Corner_Oval_Orange" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" /> </RelativeLayout> </RelativeLayout>
最外層是RelativeLayout,裏面嵌套一個RelativeLayout,設置高度200dp,這個也就是咱們廣告Banner的高度,裏面有兩個控件SliderLayout跟PagerIndicator。PagerIndicator負責Banner。PagerIndicator是指示器,表示當前選中的狀態。佈局
首先在onCreate方法中初始化控件,把描述跟圖片URl放map裏面。而後遍歷Map,在for循環中新建每一頁滑動的TextSliderView,把map的key做爲圖片描述,設置圖片url,設置圖片縮放類型等。最後調用SliderLayout的addSlider添加進去。咱們還能夠設置SliderLayout的滑動動畫,設置指示器樣式,設置圖片描述顯示動畫,設置滾動時間,也是計時器時間,添加頁面改變監聽函數。gradle
mDemoSlider = (SliderLayout)findViewById(R.id.slider); HashMap<String,String> urlMaps = new HashMap<>(); urlMaps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg"); urlMaps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png"); urlMaps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg"); for(String name : urlMaps.keySet()){ TextSliderView textSliderView = new TextSliderView(this); textSliderView .description(name)//描述 .image(urlMaps.get(name))//image方法能夠傳入圖片url、資源id、File .setScaleType(BaseSliderView.ScaleType.Fit)//圖片縮放類型 .setOnSliderClickListener(onSliderClickListener);//圖片點擊 textSliderView.bundle(new Bundle()); textSliderView.getBundle().putString("extra",name);//傳入參數 mDemoSlider.addSlider(textSliderView);//添加一個滑動頁面 } mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);//滑動動畫 // mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);//默認指示器樣式 mDemoSlider.setCustomIndicator((PagerIndicator)findViewById(R.id.custom_indicator2));//自定義指示器 mDemoSlider.setCustomAnimation(new DescriptionAnimation());//設置圖片描述顯示動畫 mDemoSlider.setDuration(4000);//設置滾動時間,也是計時器時間 mDemoSlider.addOnPageChangeListener(onPageChangeListener);
Banner的Item點擊監聽,也就是ViewPager的某一頁點擊監聽。
private BaseSliderView.OnSliderClickListener onSliderClickListener=new BaseSliderView.OnSliderClickListener() { @Override public void onSliderClick(BaseSliderView slider) { Toast.makeText(MainActivity.this,slider.getBundle().get("extra") + "", Toast.LENGTH_SHORT).show(); } };
頁面改變監聽,ViewPager是咱們常常用到的控件。對這個回調應該很熟悉了。。不過多解釋。
//頁面改變監聽 private ViewPagerEx.OnPageChangeListener onPageChangeListener=new ViewPagerEx.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { Log.d("ansen", "Page Changed: " + position); } @Override public void onPageScrollStateChanged(int state) {} };
調用SliderLayout的setPresetTransformer能夠設置滑動動畫,這個方法傳入的是一個Transformer對象。這個對象是一個枚舉類型,有如下值:
你們能夠設置不一樣的值看看什麼樣的效果,也能夠下載做者github的demo,文章末尾我會貼出這個項目的github地址。
PagerIndicator(指示器)類的自定義屬性比較多,咱們講幾個經常使用的。
custom:selected_color 選中顏色 custom:selected_drawable 選中圖片 custom:selected_height 選中高度 custom:selected_padding_left 選中指示器左內邊距 custom:selected_padding_right 選中指示器右內邊距 custom:selected_width 選中寬度 custom:shape 指示器。。的類型,有oval跟rect兩種 custom:unselected_color 未選中指示器顏色 custom:unselected_height 未選中高度 custom:unselected_padding_left 未選中指示器左內邊距 custom:unselected_padding_right 未選中指示器右內邊距 custom:unselected_width 未選中寬度
我寫的demo源碼下載地址:
https://github.com/ansen666/ImageSlider
開源項目github地址
https://github.com/daimajia/AndroidImageSlider
建議你們直接從開源項目做者的github下載demo,而後運行下,看看效果。我寫的demo沒有做者的全面,可是也能參考。
若是你想第一時間看個人後期文章,掃碼關注公衆號,長期推送Android開發文章、最新動態、開源項目,讓你各類漲姿式。
Android開發666 - 安卓開發技術分享 掃描二維碼加關注