转载自:http://blog.csdn.net/kpioneer123/article/details/51121550
本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>();
- private int currentPosition =0;
- @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));
- 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();
- view.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- final String bannerid = bannerlist.get(currentPosition).get("id").toString();
- final String banner_title = bannerlist.get(currentPosition).get("scene_name")
- .toString();
- Intent intent = new Intent();
- intent.putExtra("bannerid", bannerid);
- intent.putExtra("banner_title", banner_title);
- intent.setClass(InsuranceShopActivity.this,In_ShopSceneProductsActivity.class);
- InsuranceShopActivity.this.startActivity(intent);
- }
- });
- container.addView(view, 0);
- return view;
- }
- }
- }
- final String bannerid = bannerlist.get(currentPosition).get("id").toString();
- final String banner_title = bannerlist.get(currentPosition).get("scene_name")
- .toString();