首先是xml布局:
<androidx.viewpager.widget.ViewPager android:id="@+id/loopviewpager" android:layout_width="match_parent" android:layout_height="150dp" />
主类:
public class PushOfferActivity extends Activity { private ViewPager viewPager; //轮播图模块 private int[] mImg; private ArrayList<ImageView> mImgList; private LinearLayout ll_dots_container; private int previousSelectedPosition = 0;//点的位置 boolean isRunning = false; private Button btnColse; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_push); initLoopView(); //实现轮播图 } private void initLoopView() { Point p = Common.getInstance().getRelSize(); int width = p.x; viewPager = (ViewPager)findViewById(R.id.loopviewpager); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,width); viewPager.setLayoutParams(params); ll_dots_container = (LinearLayout)findViewById(R.id.ll_dots_loop); // 图片资源id数组 mImg = new int[]{ R.drawable.logo_1, R.drawable.logo_2, R.drawable.logo_3, }; Button btn1 = findViewById(R.id.start_trial); RelativeLayout.LayoutParams paramsbtn = new RelativeLayout.LayoutParams(width*3/4,width*39/400); paramsbtn.setMargins(0,width/30,0,0); paramsbtn.addRule(RelativeLayout.BELOW,R.id.price_trial); paramsbtn.addRule(RelativeLayout.CENTER_HORIZONTAL); btn1.setLayoutParams(paramsbtn); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Common.offerCharge("spvp0002"); } }); btnColse = findViewById(R.id.close_push); btnColse.setVisibility(View.GONE); RelativeLayout.LayoutParams paramsclos = new RelativeLayout.LayoutParams(100,100); paramsclos.addRule(RelativeLayout.ALIGN_PARENT_LEFT|RelativeLayout.ALIGN_PARENT_TOP); btnColse.setLayoutParams(paramsclos); btnColse.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); Message msg = new Message(); msg.what = 1; handler.sendMessageDelayed(msg, 2000L); // 初始化要展示的5个ImageView mImgList = new ArrayList<ImageView>(); ImageView imageView; View dotView; LinearLayout.LayoutParams layoutParams; for(int i=0;i<mImg.length;i++){ //初始化要显示的图片对象 imageView = new ImageView(this); imageView.setBackgroundResource(mImg[i]); mImgList.add(imageView); //加引导点 dotView = new View(this); dotView.setBackgroundResource(R.drawable.dot); layoutParams = new LinearLayout.LayoutParams(15,15); if(i!=0){ layoutParams.leftMargin=10; } //设置默认所有都不可用 dotView.setEnabled(false); ll_dots_container.addView(dotView,layoutParams); } ll_dots_container.getChildAt(0).setEnabled(true); previousSelectedPosition=0; //设置适配器 viewPager.setAdapter(new LoopViewAdapter(mImgList)); // 开启轮询 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { int newPosition = i % mImgList.size(); ll_dots_container.getChildAt(previousSelectedPosition).setEnabled(false); ll_dots_container.getChildAt(newPosition).setEnabled(true); previousSelectedPosition = newPosition; } @Override public void onPageScrollStateChanged(int i) { } }); new Thread(){ public void run(){ isRunning = true; while(isRunning){ try{ Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //下一条 runOnUiThread(new Runnable() { @Override public void run() { if(viewPager.getCurrentItem() ==mImgList.size()-1){ viewPager.setCurrentItem(0); }else{ viewPager.setCurrentItem(viewPager.getCurrentItem()+1); } } }); } } }.start(); } public Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(final Message msg) { switch (msg.what) { case 1: btnColse.setVisibility(View.VISIBLE); break; } } }; }
适配器:
public class LoopViewAdapter extends PagerAdapter { private ArrayList<ImageView> imageViewList; public LoopViewAdapter(ArrayList<ImageView> mImgList) { imageViewList = mImgList; } // 1. 返回要显示的条目内容, 创建条目 @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView(imageViewList.get(position), 0); return imageViewList.get(position); } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(imageViewList.get(position)); } @Override public int getCount() { return imageViewList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { return view == o; } }
这里我说有,网上有的说将getCount设置为无限大,这样就能过实现轮播,我当时也试了,可以,但是!!!!!这个时候你反方向滑动就会出现崩溃!!!!此链接为我在头条的链接,https://www.toutiao.com/i6857318904889344516/