这次,主要说一下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 mList;    public BannerAdapter(List 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,我们去最大值,这样可以实现无限循环。

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:id="@+id/viewpager"            android:layout_width="match_parent"            android:layout_height="match_parent">        
这是我们的布局,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 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();        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的图片一般都是通过网络请求到的,但是现在没有进行网络方面的请求,所以暂时先给大家看一下静态的数据吧。

后期这边网络请求后,会对这方面进行更新以及深入的思考。

更多相关文章

  1. Android(安卓)OkHttp简单封装
  2. android之activity平滑水平切换动画
  3. pre-network 网络预加载框架,android网络优化
  4. Android中不使用AIDL实现Service的远程调用
  5. android fragment+ FragmentTabHost+viewpager 切换状态不保存的
  6. okHttp3学习总结
  7. android简单的请求手机权限封装
  8. Android(安卓)Activity切换动画案例
  9. Android(安卓)2.2 API Demos -- 通过调用子Activity返回值

随机推荐

  1. 【故障处理】imp-00051,imp-00008
  2. 如何正确的删除表空间数据文件
  3. 消除11.2上的db file parallel read
  4. 【故障处理】队列等待之TX - allocate IT
  5. PKG_COLLECTION_LHR 存储过程或函数返回
  6. 【12c】扩展数据类型(Extended Data Types
  7. 用x种方式求第n项斐波那契数,99%的人只会
  8. CAP定理
  9. Hash Cluster Table 研究
  10. 【故障处理】 DBCA建库报错CRS-2566