封裝好的圖片滑動框架(AndroidImageSlider)

前言

廣告輪播條的重要性不言而喻。在不少類型app中出場率都很高。java

今天給你們介紹一個輪播圖開源項目,這個項目把輪播圖須要的ViewPager跟計時器作了封裝,使用極其方便,支持gradle在線依賴。還封裝了幾種圖片滑動動畫。android

無圖無真相:git

banner

有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是指示器,表示當前選中的狀態。佈局

MainActivity.java 首頁

首先在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對象。這個對象是一個枚舉類型,有如下值:

  • Transformer.Default 默認
  • Transformer.Accordion
  • Transformer.Background2Foreground
  • Transformer.CubeIn
  • Transformer.DepthPage
  • Transformer.Fade
  • Transformer.FlipHorizontal
  • Transformer.FlipPage
  • Transformer.Foreground2Background
  • Transformer.RotateDown
  • Transformer.RotateUp
  • Transformer.Stack
  • Transformer.Tablet
  • Transformer.ZoomIn
  • Transformer.ZoomOutSlide
  • Transformer.ZoomOut

你們能夠設置不一樣的值看看什麼樣的效果,也能夠下載做者github的demo,文章末尾我會貼出這個項目的github地址。

設置圖片描述顯示時動畫

  • setCustomAnimation(new DescriptionAnimation()); 描述默認動畫
  • setCustomAnimation(new ChildAnimationExample());

指示器自定義屬性

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 - 安卓開發技術分享
             掃描二維碼加關注

Android開發666

相關文章
相關標籤/搜索