本demo 实现以下功能
1、页面数=1时,页面静止;
2、页面数=>2时,页面滑动不会产生空白
基本思路
当图片数量为1的时候,不让滑动,
当图片数量为2的时候,按原图片顺序再依次添加,图片数翻倍变为4,防止出现空白页,但是轮播点的个数依然写为2,这样就可以完美解决。
当图片数量为n>2的时候,按照常规写法即可。
package com.cloudhome.viewpagerproject; import android.os.Bundle; import android.os.Message; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.ImageView; import android.widget.LinearLayout; import com.android.volley.toolbox.NetworkImageView; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { public InsuranceShop_ImageHandler InsuranceShop_handler = new InsuranceShop_ImageHandler( new WeakReference<MainActivity>(this)); public ViewPager insurbanner; ArrayList<NetworkImageView> newImageViews; private NetworkImageView networkImageView; private ViewGroup group; // 图中小圆点Group private ImageView[] imageDots = null; // 小圆点数组集合 private ImageView view; private ImageAdapter imageAdapter; private List<HeadImage> imageLists = new ArrayList<HeadImage>(); private List<HeadImage> imageList_orginal = new ArrayList<HeadImage>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); initviewPage_img(); } public void initviewPage_img() { HeadImage headImage_suoluetu1 = new HeadImage(); HeadImage headImage_suoluetu2 = new HeadImage(); HeadImage headImage_suoluetu3 = new HeadImage(); HeadImage headImage_suoluetu4 = new HeadImage(); HeadImage headImage_suoluetu5 = new HeadImage(); headImage_suoluetu1 .setIndexImgurl("http://i1.sinaimg.cn/gm/cr/2015/0413/1065544739.jpg"); headImage_suoluetu2 .setIndexImgurl("http://pic.58pic.com/58pic/12/81/24/81S58PICjnb.jpg"); headImage_suoluetu3 .setIndexImgurl("http://d.3987.com/qingx_150213/001.jpg"); headImage_suoluetu4 .setIndexImgurl("http://img3.imgtn.bdimg.com/it/u=2581234383,1952951452&fm=21&gp=0.jpg"); headImage_suoluetu5 .setIndexImgurl("http://image.baidu.com/search/detail?ct=503316480&z=1&tn=baiduimagedetail&ipn=d&word=%E9%A3%8E%E6%99%AF%20%E5%B0%8F%E5%B0%BA%E5%AF%B8&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=-1&cs=1808999674,2935367553&os=3410395349,124291932&simid=4178998595,794777276&pn=1&rn=1&di=123285481110&ln=1968&fr=&fmq=1460351344815_R&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=&istype=2&ist=&jit=&bdtype=0&gsm=78&objurl=http%3A%2F%2Fimg.daimg.com%2Fuploads%2Fallimg%2F111111%2F3-11111116430K10.jpg"); // 正常情况下 图片List 通过 msg—handle机制获取,这里为了方便 直接数据写死 // List<HeadImage> imageLists = (List<HeadImage>) msg.obj; //在这里可以依次添加1到n个图片测试 imageList_orginal.add(headImage_suoluetu1); imageList_orginal.add(headImage_suoluetu2); // imageList_orginal.add(headImage_suoluetu3); // imageList_orginal.add(headImage_suoluetu4); // imageLists.add(headImage_suoluetu5); initviewPage(); newImageViews = new ArrayList<NetworkImageView>(); switch (imageList_orginal.size()) { case 2: imageLists.add(imageList_orginal.get(0)); imageLists.add(imageList_orginal.get(1)); imageLists.add(imageList_orginal.get(0)); imageLists.add(imageList_orginal.get(1)); break; default: imageLists = imageList_orginal; break; } for (int i = 0; i < imageLists.size(); i++) { networkImageView = new NetworkImageView( MainActivity.this); networkImageView.setScaleType(ImageView.ScaleType.FIT_XY); networkImageView.setDefaultImageResId(R.mipmap.white_bg); networkImageView.setImageUrl(imageLists.get(i) .getIndexImgurl(), VolleyTool.getInstance(MainActivity.this) .getmImageLoader()); newImageViews.add(networkImageView); } group.removeAllViews(); imageDots = new ImageView[imageList_orginal.size()];// 小点个数 for (int i = 0; i < imageDots.length; i++) { imageDots[i] = new ImageView(MainActivity.this); // 设置参数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20); params.gravity = Gravity.CENTER_HORIZONTAL; params.setMargins(6, 0, 6, 0); imageDots[i].setLayoutParams(params); imageDots[i].setPadding(20, 0, 20, 0); if (i == 0) { imageDots[i] .setBackgroundResource(R.mipmap.white_piont_icon); } else { imageDots[i] .setBackgroundResource(R.mipmap.gray_piont_icon); } group.addView(imageDots[i]); } imageAdapter = new ImageAdapter(newImageViews); insurbanner.setAdapter(imageAdapter); imageAdapter.notifyDataSetChanged(); } public void initviewPage() { insurbanner = (ViewPager) findViewById(R.id.insurbanner); group = (ViewGroup) findViewById(R.id.point_group); insurbanner.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { // 配合Adapter的currentItem字段进行设置。 @Override public void onPageSelected(int arg0) { InsuranceShop_handler.sendMessage(Message.obtain( InsuranceShop_handler, InsuranceShop_ImageHandler.MSG_PAGE_CHANGED, arg0, 0)); int currentPosition = arg0 % imageList_orginal.size(); for (int i = 0; i < imageList_orginal.size(); i++) { imageDots[currentPosition] .setBackgroundResource(R.mipmap.white_piont_icon); if (currentPosition != i) { imageDots[i] .setBackgroundResource(R.mipmap.gray_piont_icon); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } // 覆写该方法实现轮播效果的暂停和恢复 @Override public void onPageScrollStateChanged(int arg0) { if (imageList_orginal.size() != 1 && imageList_orginal.size() > 1) { switch (arg0) { case ViewPager.SCROLL_STATE_DRAGGING: InsuranceShop_handler .sendEmptyMessage(InsuranceShop_ImageHandler.MSG_KEEP_SILENT); break; case ViewPager.SCROLL_STATE_IDLE: InsuranceShop_handler .sendEmptyMessageDelayed( InsuranceShop_ImageHandler.MSG_UPDATE_IMAGE, InsuranceShop_ImageHandler.MSG_DELAY); break; default: break; } } } }); insurbanner.setCurrentItem(Integer.MAX_VALUE / 2);// 默认在中间,使用户看不到边界 // 开始轮播效果 InsuranceShop_handler.sendEmptyMessageDelayed( InsuranceShop_ImageHandler.MSG_BREAK_SILENT, InsuranceShop_ImageHandler.MSG_DELAY); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public class ImageAdapter extends PagerAdapter { private ArrayList<NetworkImageView> viewlist; public ImageAdapter(ArrayList<NetworkImageView> viewlist) { this.viewlist = viewlist; } @Override public int getCount() { // 设置成最大,使用户看不到边界 if (viewlist.size() == 1) { return 1; } else { return Integer.MAX_VALUE; } } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // Warning:不要在这里调用removeView } @Override public Object instantiateItem(ViewGroup container, int position) { // 对ViewPager页号求模取出View列表中要显示的项 position %= viewlist.size(); if (position < 0) { position = viewlist.size() + position; } view = viewlist.get(position); // 如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。 ViewParent vp = view.getParent(); if (vp != null) { ViewGroup parent = (ViewGroup) vp; parent.removeView(view); } final String abc = imageLists.get(position).getIndexImgurl(); // Log.d("position","1111111"+position+""); // Log.d("abc","1111111"+abc+""); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { for (int i = 0; i < imageLists.size(); i++) { if (abc == imageLists.get(i).getIndexImgurl()) { // bannerid = bannerlist.get(i).get("id").toString(); // banner_title = bannerlist.get(i).get("scene_name") // .toString(); } } } }); container.addView(view, 0); return view; } } }