這次,主要說一下android開發過程中的banner的滾動輪播的實現,並且能夠循環,而且我們還可以手動拖動來實現banner圖片的切換。我自己設計的時候沒有用到圓點,所以大家看到的我也沒有對圓點進行總結。
首先是我們的BannerAdapter:
import android.support.v4.view.PagerAdapter; import android.widget.ImageView; import java.util.List; import android.view.View; import android.view.ViewGroup; /** * Created by Administrator on 2016/8/9 0009. */ public class BannerAdapter extends PagerAdapter { //數據源 private List<ImageView> mList; public BannerAdapter(List<ImageView> list) { this.mList = list; } @Override public int getCount() { //取超大的數,實現無線循環效果 return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mList.get(position % mList.size())); return mList.get(position % mList.size()); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mList.get(position % mList.size())); } }adapter的註釋上面有標註,這裏注意一下getCount()中的MAX_VALUE,我們去最大值,這樣可以實現無限循環。
<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" tools:context="com.kegoal.activity.test.IndexActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </RelativeLayout>這是我們的佈局,banner使用到的佈局,很明顯是使用的ViewPager。
接下來就是我們的主Activity了。IndexActivity.class:
import android.os.SystemClock; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import com.adapter.BannerAdapter; import java.util.ArrayList; import java.util.List; public class IndexActivity extends AppCompatActivity { private ViewPager viewPager; private List<ImageView> mlist; private int[] bannerImages = {R.mipmap.login_bg, R.mipmap.login_btn_qq, R.mipmap.login_bg, R.mipmap.login_btn_qq}; private BannerAdapter mAdapter; private BannerListener bannerListener; //線程標誌 private boolean isStop = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_index); viewPager = (ViewPager) findViewById(R.id.viewpager); initData(); initAction(); new Thread(new Runnable() { @Override public void run() { while (!isStop) { SystemClock.sleep(3000); runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } }); } } }).start(); } private void initAction() { bannerListener = new BannerListener(); viewPager.setOnPageChangeListener(bannerListener); viewPager.setCurrentItem(0); } private void initData() { mlist = new ArrayList<ImageView>(); for (int i = 0; i < bannerImages.length; i++) { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(bannerImages[i]); mlist.add(imageView); } mAdapter = new BannerAdapter(mlist); viewPager.setAdapter(mAdapter); } class BannerListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } } @Override protected void onDestroy() { //關閉定時器 isStop = true; super.onDestroy(); } }總的來說就這些代碼了,實現三秒一切換,就是讓一張圖片sleep三秒,然後切換。切換的主要邏輯就是viewpager.setCurrentItem()+1 這段代碼。相信大家都可以理解。
這樣就簡單的實現了banner的滾動輪播,banner的圖片一般都是通過網絡請求到的,但是現在沒有進行網絡方面的請求,所以暫時先給大家看一下靜態的數據吧。
後期這邊網絡請求後,會對這方面進行更新以及深入的思考。