1. 程式人生 > >android應用的首頁引導輪播圖和banner輪播框架的使用

android應用的首頁引導輪播圖和banner輪播框架的使用

一、引導頁輪播圖

說明:專案中的輪播圖不要求太多的效果,所以使用了guideshow的jar包

Git地址:https://github.com/javajavadog/guideshow

專案中使用的步驟

1、開啟專案的地址,下載其中的jar包,複製到專案中的lib下並右鍵新增到依賴中

2、讓splashActivity繼承ABSGuideActivity類並複寫所有方法

public class SplashActivity extends AbsGuideActivity {
    private List<SinglePage> guideContent;

//    @Override
//    public void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_splash);
//    }

    @Override
    public List<SinglePage> buildGuideContent() {
        setStatusBarColor();
        guideContent = new ArrayList<>();//建立集合存放輪播圖片
        /**
         * 建立第一圖片
         */
        SinglePage page1 = new SinglePage();//單個圖片物件
        page1.mBackground = getResources().getDrawable(R.mipmap.ic_1);//新增圖片
        //頁面元素動畫
        SingleElement singleElement1 = new SingleElement(200, 200, 400, 400, 0.0f, 1.0f, BitmapFactory.decodeResource(
                getResources(), R.mipmap.ic_stuff));
        SingleElement singleElement2 = new SingleElement(700, 800, 700, 100, 0.0f, 1.0f, BitmapFactory.decodeResource(
                getResources(), R.mipmap.ic_stuff));
        page1.mElementsList.add(singleElement1);//頁面新增的兩個元素
        page1.mElementsList.add(singleElement2);
        guideContent.add(page1);//圖片存放到集合中

 * 在滑動到最後一張圖片時,就要點選按鈕跳轉到主介面
 */
        SinglePage page2 = new SinglePage();
        page2.mCustomFragment = new EntryFragment();//定義一個fragment類,處理跳轉的
        guideContent.add(page2);

        return guideContent;
    }

    /**
     * 是否顯示下面的小圓點
     * @return
     */
    @Override
    public boolean drawDot() {
        return false;
    }

    /**
     * 未被選中的圖片圓點的圖片
     * @return
     */
    @Override
    public Bitmap dotDefault() {
        return BitmapFactory.decodeResource(getResources(), R.mipmap.ic_dot_default);
    }

    /**
     * 被選中的圓點圖片
     * @return
     */
    @Override
    public Bitmap dotSelected() {
        return BitmapFactory.decodeResource(getResources(), R.mipmap.ic_dot_selected);
    }

    /**
     * 輪播圖的個數
     * @return
     */
    @Override
    public int getPagerId() {
 //       return R.id.guide_container;
          return 2;
    }

   

}

 getPagerId()的房return返回的物件也可寫成

return R.id.guide_container;

 在專案的res下面建立ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="guide_container" type="id"/>
</resources>

3、定義一個EntryFragment類處理跳轉

public class EntryFragment extends Fragment {
    FragmentEntryBinding binding;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        setStatusBarColor();
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_entry, container, false);
        return binding.getRoot();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
    }

    private void initView() {
        binding.btnEntry.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), MainActivity.class);//跳轉到主介面
                startActivity(intent);
                getActivity().onBackPressed();//銷燬自己
            }
        });
    }
   
   
}

佈局(沒有使用databinding把layout去掉)

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:fitsSystemWindows="true"
        tools:context="com.maijia.QR.fragment.EntryFragment">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@mipmap/ic_4" />

        <Button
            android:id="@+id/btn_entry"
            android:layout_width="160dp"
            android:layout_height="wrap_content"
            android:text="進入"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true" />

    </RelativeLayout>
</layout>

 OK大功告成,可以劃劃試試

最後如果專案要求比較多,可以使用海外人士paolorotoloAppIntro框架

Git地址:https://github.com/PaoloRotolo/AppIntro

二、頭部banner圖輪播

說明:使用的是Git比較火的banner框架

地址:https://github.com/youth5201314/banner

1、新增依賴

dependencies{
    compile 'com.youth.banner:banner:1.4.10'  //最新版本
}

2、清單檔案中新增相關的許可權

<!-- if you want to load images from the internet -->
<uses-permission android:name="android.permission.INTERNET" /> 

<!-- if you want to load images from a file OR from the internet -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

3、banner的佈局

<com.youth.banner.Banner
    android:id="@+id/banner"
    android:layout_width="match_parent"
    android:layout_height="@dimen/base185dp"
    android:layout_marginTop="@dimen/base3dp"
    android:layout_marginBottom="@dimen/base3dp"
    ></com.youth.banner.Banner>

4、設定圖片載入器程式碼

public class GlideImageLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        //具體方法內容自己去選擇,次方法是為了減少banner過多的依賴第三方包,所以將這個許可權開放給使用者去選擇
        Glide.with(context.getApplicationContext())
                .load(path)
                .into(imageView);
    }

    @Override
    public ImageView createImageView(Context context) {
        //圓角
        return new RoundAngleImageView(context);
    }
}

5、專案程式碼的使用

  //本地圖片資料(資原始檔)
        List<Integer> list = new ArrayList<>();
        list.add(R.mipmap.b1);
        list.add(R.mipmap.b2);
        list.add(R.mipmap.b3);
        HeaderBinding.banner.setImages(list)
                .setImageLoader(new GlideImageLoader())//圖片載入器
                .isAutoPlay(true)
                .setDelayTime(5000)
                .setOnBannerListener(new OnBannerListener() {
                    @Override
                    public void OnBannerClick(int position) {
                        ToastUtil.show(getActivity(),"你點選的是::"+position);
                    }
                })
                .start();


    @Override
    public void onResume() {
        HeaderBinding.banner.startAutoPlay();
        super.onResume();
    }

    @Override
    public void onPause() {
        HeaderBinding.banner.stopAutoPlay();
        super.onPause();
    }

另外:XBanner專案也不錯哦

地址:https://github.com/xiaohaibin/XBanner