Android之Banner的滚动轮播实现
16lz
2021-01-26
这次,主要说一下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 Listadapter的注释上面有标注,这里注意一下getCount()中的MAX_VALUE,我们去最大值,这样可以实现无限循环。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())); }}
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总的来说就这些代码了,实现三秒一切换,就是让一张图片sleep三秒,然后切换。切换的主要逻辑就是viewpager.setCurrentItem()+1 这段代码。相信大家都可以理解。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(); }}
这样就简单的实现了banner的滚动轮播,banner的图片一般都是通过网络请求到的,但是现在没有进行网络方面的请求,所以暂时先给大家看一下静态的数据吧。
后期这边网络请求后,会对这方面进行更新以及深入的思考。
更多相关文章
- Android(安卓)OkHttp简单封装
- android之activity平滑水平切换动画
- pre-network 网络预加载框架,android网络优化
- Android中不使用AIDL实现Service的远程调用
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的
- okHttp3学习总结
- android简单的请求手机权限封装
- Android(安卓)Activity切换动画案例
- Android(安卓)2.2 API Demos -- 通过调用子Activity返回值