用AdapterViewFlipper輕松完成圖片輪播
一、認識AdapterViewFilpper
AdapterViewFilpper 繼承 了AdapterViewAnimator,它也會顯示 Adapter 提供的多個 View 組件,但它每次只能顯示一個View組件,程序可通過showPrevious()和showNext()方法控制該組件顯示上一個、下一個組件。
AdapterViewFilpper可以在多個View切換過程中使用漸隱漸顯的動畫效果。除此之外,還可以調(diào)用該組件的startFlipping()控制它“自動播放”下一個View組件。
AdapterViewAnimator支持的XML屬性如下:
- android:animateFirstView:設(shè)置顯示組件的第一個View時是否使用動畫。
- android:inAnimation:設(shè)置組件顯示時使用的動畫。
- android:loopViews:設(shè)置循環(huán)到最后一個組件時是否自動跳轉(zhuǎn)到第一個組件。
- android:outAnimation:設(shè)置組件隱藏時使用的動畫。
AdapterViewFilpper額外支持的XML屬性及相關(guān)方法如下表所示。
XML屬性 |
相關(guān)方法 |
說明 |
---|---|---|
android:autoStart |
startFlpping() |
設(shè)置顯示該組件是否自動播放 |
android:flipInterval |
setFlipInterval(int) |
設(shè)置自動播放的時間間隔 |
二、AdapterViewFilpper示例
接下來通過一個簡單的示例程序來學(xué)習(xí)AdapterViewFilpper的使用方法。
繼續(xù)使用WidgetSample工程的listviewsample模塊,在app/main/res/layout/目錄下創(chuàng)建adapterview_filpper_layout.xml文件,在其中填充如下代碼片段:
<?xml version="1.0" encoding="utf-8" ?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <AdapterViewFlipper android:id="@+id/flipper" android:layout_width="match_parent" android:layout_height="match_parent" android:flipInterval="5000" android:layout_alignParentTop="true"/> <Button android:id="@+id/prev_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:text="上一個"/> <Button android:id="@+id/next_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="下一個"/> <Button android:id="@+id/auto_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="自動播放"/> </RelativeLayout>
創(chuàng)建一個MyFilpperAdapter類,繼承BaseAdapter類,重寫其4個主要方法,具體代碼如下:
package com.jinyu.cqkxzsxy.android.listviewsample.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; /** * @創(chuàng)建者 鑫鱻 * @描述 Android零基礎(chǔ)入門到精通系列教程,歡迎關(guān)注微信公眾號ShareExpert */ public class MyFilpperAdapter extends BaseAdapter { private Context mContext = null; private int[] mImageIds = null; public MyFilpperAdapter(Context context, int[] imageIds) { this.mContext = context; this.mImageIds = imageIds; } @Override public int getCount() { return mImageIds.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } // 該方法返回的View代表了每個列表項 @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = null; if(null == convertView) { // 創(chuàng)建一個ImageView imageView = new ImageView(mContext); // 設(shè)置ImageView的縮放類型 imageView.setScaleType(ImageView.ScaleType.FIT_XY); // 為imageView設(shè)置布局參數(shù) imageView.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); convertView = imageView; } else { imageView = (ImageView) convertView; } // 給ImageView設(shè)置圖片資源 imageView.setImageResource(mImageIds[position]); return imageView; } }
接下來為AdapterViewFilpper提供Adapter,使用自定義的BaseAdapter。新建AdapterViewFilperActivity.java文件,加載上面新建的布局文件,具體代碼如下:
package com.jinyu.cqkxzsxy.android.listviewsample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterViewFlipper; import android.widget.Button; import com.jinyu.cqkxzsxy.android.listviewsample.adapter.MyFilpperAdapter; public class AdapterViewFilperActivity extends AppCompatActivity implements View.OnClickListener { private AdapterViewFlipper mFlipper = null; private Button mPrevBtn = null; private Button mNextBtn = null; private Button mAutoBtn = null; private int[] mImageIds = { R.drawable.image_01,R.drawable.image_02,R.drawable.image_03, R.drawable.image_04,R.drawable.image_05,R.drawable.image_06, R.drawable.image_07,R.drawable.image_08,R.drawable.image_09 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.adapterview_filpper_layout); // 獲取界面組件 mFlipper = (AdapterViewFlipper) findViewById(R.id.flipper); mPrevBtn = (Button) findViewById(R.id.prev_btn); mNextBtn = (Button) findViewById(R.id.next_btn); mAutoBtn = (Button) findViewById(R.id.auto_btn); // 為AdapterViewFlipper設(shè)置Adapter MyFilpperAdapter adapter = new MyFilpperAdapter(this, mImageIds); mFlipper.setAdapter(adapter); // 為三個按鈕設(shè)置點擊事件監(jiān)聽器 mPrevBtn.setOnClickListener(this); mNextBtn.setOnClickListener(this); mAutoBtn.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.prev_btn: // 顯示上一個組件 mFlipper.showPrevious(); // 停止自動播放 mFlipper.stopFlipping(); break; case R.id.next_btn: // 顯示下一個組件。 mFlipper.showNext(); // 停止自動播放 mFlipper.stopFlipping(); break; case R.id.auto_btn: // 開始自動播放 mFlipper.startFlipping(); break; default: break; } } }
上面程序代碼調(diào)用了 AdapterViewFlipper 的 showPrevious()、 showNext()方法來控制該組件顯示上一個、下一個組件,并調(diào)用了 startFlipping()方法控制自動播放。
修改程序啟動的Activity,運行程序,可以看到下圖所示界面效果。
單擊上一個或下一個按鈕可以切換顯示的組件,單擊自動播放按鈕,將可以看到AdapterViewFlipper每隔5秒更換一個圖片,切換圖片時會使用漸隱漸顯效果。
至此,關(guān)于AdapterViewFlipper的簡單使用學(xué)習(xí)完畢,更多屬性和方法建議多加練習(xí)并掌握。
以上就是用AdapterViewFlipper輕松完成圖片輪播的詳細內(nèi)容,更多關(guān)于AdapterViewFlipper完成圖片輪播的資料請關(guān)注腳本之家其它相關(guān)文章!
- Android基于AdapterViewFlipper實現(xiàn)的圖片/文字輪播動畫控件
- Android實現(xiàn)背景圖片輪播
- Android輪播圖點擊圖片放大效果的實現(xiàn)方法
- Android實現(xiàn)圖片輪播列表
- 詳解android 視頻圖片混合輪播實現(xiàn)
- Android開發(fā)實現(xiàn)的自動換圖片、輪播圖效果示例
- Android實現(xiàn)輪播圖片展示效果
- Android自定義圖片輪播Banner控件使用解析
- Android高級圖片滾動控件實現(xiàn)3D版圖片輪播器
- Android開發(fā)使用Handler的PostDelayed方法實現(xiàn)圖片輪播功能
相關(guān)文章
Android基于自帶的DownloadManager實現(xiàn)下載功能示例
這篇文章主要介紹了Android基于自帶的DownloadManager實現(xiàn)下載功能,結(jié)合實例形式分析了DownloadManager實現(xiàn)下載功能的具體操作步驟與相關(guān)注意事項,需要的朋友可以參考下2017-08-08詳解 Android中Libgdx使用ShapeRenderer自定義Actor解決無法接收到Touch事件的問題
這篇文章主要介紹了詳解 Android中Libgdx使用ShapeRenderer自定義Actor解決無法接收到Touch事件的問題的相關(guān)資料,希望通過本文能幫助到大家解決這樣的問題,需要的朋友可以參考下2017-09-09a2sd+狀態(tài)下應(yīng)用程序丟失的解決方法詳細解析
用了a2sd+和SD分區(qū)方案的朋友可能會遇到突然某次開機之后,a2sd+失效,同時發(fā)生丟失若干應(yīng)用程序的現(xiàn)象或者安裝軟件提示空間不足2013-09-09Android 一鍵清理、內(nèi)存清理功能實現(xiàn)
這篇文章主要介紹了Android 一鍵清理、內(nèi)存清理功能實現(xiàn),非常具有實用價值,需要的朋友可以參考下。2017-01-01Android 中RecyclerView通用適配器的實現(xiàn)
這篇文章主要介紹了Android 中RecyclerView通用適配器的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-03-03Android中轉(zhuǎn)場動畫的實現(xiàn)與兼容性處理
大家都知道Android 中的動畫有很多,除了在一個界面上使用幀動畫、屬性動畫將一個或多個 View 進行動畫處理以外,還可以用于兩個界面之間過渡、跳轉(zhuǎn)。本文的內(nèi)容包括:Android 5.0+ 的轉(zhuǎn)場動畫和Android 4.X 模擬實現(xiàn) Android 5.0+ 轉(zhuǎn)場效果。有需要的可以參考借鑒。2016-10-10Flutter開發(fā)setState能否在build中直接調(diào)用詳解
這篇文章主要為大家介紹了Flutter開發(fā)setState能否在build中直接調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10