banner无限轮播
Posted 嘉禾世兴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了banner无限轮播相关的知识,希望对你有一定的参考价值。
activity_main.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"> <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> <LinearLayout android:id="@+id/dotLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:gravity="center" android:orientation="horizontal" /> </RelativeLayout> </RelativeLayout>
selecter.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"> <shape android:shape="oval"> <size android:height="10dp" android:width="10dp"></size> <solid android:color="#aa000000"></solid> </shape> </item> <item android:state_enabled="false"> <shape android:shape="oval"> <size android:height="10dp" android:width="10dp"></size> <solid android:color="#aaffffff"></solid> </shape> </item> </selector>
public class MainActivity extends AppCompatActivity { private List<ImageView> list; private LinearLayout dotLayout; private int prePosition; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); //开启一个新线程,实现ViewPager的自动滚动 new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //runOnUiThread中的代码运行在主线程中 runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } }); } } }).start(); } private void initView() { viewPager = (ViewPager) findViewById(R.id.viewPager); //构造适配器 MyAdapter adapter = new MyAdapter(list); //设置Adapter viewPager.setAdapter(adapter); //设置ViewPager预加载的页数 // viewPager.setOffscreenPageLimit(2); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { //ViewPager滑动过程中调用 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //ViewPager新页面确定后调用 @Override public void onPageSelected(int position) { //设置前一个View为白色 dotLayout.getChildAt(prePosition).setEnabled(false); //设置当前View为红色 dotLayout.getChildAt(position % list.size()).setEnabled(true); //将当前位置赋给prePosition prePosition = position % list.size(); } //ViewPager滑动状态改变后调用 //0--静止状态 //1--手在拖动 //2--手松开后自动滑动 @Override public void onPageScrollStateChanged(int state) { } }); //设置ViewPager的初始item viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - 3); } /** * 构造数据源 */ private void initData() { dotLayout = (LinearLayout) findViewById(R.id.dotLayout); list = new ArrayList<>(); int[] imgs = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; for (int img : imgs) { //使用Java代码创建一个ImageView ImageView imageView = new ImageView(this); //设置图片以及ScaleType属性 imageView.setImageResource(img); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); list.add(imageView); //创建一个View对象 View view = new View(this); //设置View的宽和高 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics())); //设置View左边距,避免View连在一起 params.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, getResources().getDisplayMetrics()); view.setLayoutParams(params); //设置背景颜色,背景使用selector,可使View在不同状态显示不同颜色 view.setBackgroundResource(R.drawable.dot_radiobutton_style); //默认状态下View的Enable属性为false(View全为白色) view.setEnabled(false); //将View添加进LinearLayout中 dotLayout.addView(view); } //第一个View默认为红色 dotLayout.getChildAt(0).setEnabled(true); } }
以上是关于banner无限轮播的主要内容,如果未能解决你的问题,请参考以下文章
ViewPager,ViewPager2 无限轮播功能。自定义 Indicator,支持一屏三页,支持仿魅族 banner 效果。极其简单的使用方式