自动轮播的viewpager

package com.duguang.baseanimation.ui.splash;

import java.util.ArrayList;
import java.util.List;

import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.duguang.baseanimation.R;
import com.duguang.baseanimation.ui.base.BaseActivity;

public class ViewPagerActivity extends BaseActivity implements OnPageChangeListener {

   private List<ImageView> imageViewList;
   private TextView tvDescription;
   private LinearLayout llPoints;
   private String[] imageDescriptions;
   private int previousSelectPosition = 0;
   private ViewPager mViewPager;
   private boolean isLoop = true;
   private Handler handler = new Handler() {

      @Override
      public void handleMessage(Message msg) {
         super.handleMessage(msg);

         mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
      }
   };

   @Override
   public void setView() {
      setContentView(R.layout.activity_splash_viewpager);

      // 自动切换页面功能
      new Thread(new Runnable() {

         @Override
         public void run() {
            while (isLoop) {
               SystemClock.sleep(2000);
               handler.sendEmptyMessage(0);
            }
         }
      }).start();
   }

   @Override
   public void initView() {
      mViewPager = (ViewPager) findViewById(R.id.viewpager);
       tvDescription = (TextView) findViewById(R.id.tv_image_description);
       llPoints = (LinearLayout) findViewById(R.id.ll_points);
       
       prepareData();
       
       ViewPagerAdapter adapter = new ViewPagerAdapter();
       mViewPager.setAdapter(adapter);
       mViewPager.setOnPageChangeListener(this);
       
       tvDescription.setText(imageDescriptions[previousSelectPosition]);
       llPoints.getChildAt(previousSelectPosition).setEnabled(true);
       
       /**
        * 2147483647 / 2 = 1073741820 - 1 
        */
       int n = Integer.MAX_VALUE / 2 % imageViewList.size();
       int itemPosition = Integer.MAX_VALUE / 2 - n;
       
       mViewPager.setCurrentItem(itemPosition);
   }
   
    private void prepareData() {
          imageViewList = new ArrayList<ImageView>();
          int[] imageResIDs = getImageResIDs();
          imageDescriptions = getImageDescription();
          
          ImageView iv;
          View view;
          for (int i = 0; i < imageResIDs.length; i++) {
            iv = new ImageView(this);
            iv.setBackgroundResource(imageResIDs[i]);
            imageViewList.add(iv);
            
            // 添加点view对象
            view = new View(this);
            view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
            LayoutParams lp = new LayoutParams(20, 20);
            lp.leftMargin = 10;
            view.setLayoutParams(lp);
            view.setEnabled(false);
            llPoints.addView(view);
         }
       }
       
       private int[] getImageResIDs() {
          return new int[]{
                R.drawable.bg1,
                R.drawable.bg2,
                R.drawable.bg3,
                R.drawable.pic_01,
                R.drawable.pic_02
          };
       }
       
       private String[] getImageDescription() {
          return new String[]{
                "第一个引导页面",
                "第二个引导页面",
                "第三个引导页面",
                "第四个引导页面",
                "第五个引导页面"
          };
       }
       
       class ViewPagerAdapter extends PagerAdapter {

         @Override
         public int getCount() {
            return Integer.MAX_VALUE;
         }

         /**
          * 判断出去的view是否等于进来的view 如果为true直接复用
          */
         @Override
         public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
         }

         /**
          * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position
          */
         @Override
         public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(imageViewList.get(position % imageViewList.size()));
         }

         /**
          * 创建一个view
          */
         @Override
         public Object instantiateItem(ViewGroup container, int position) {
            container.addView(imageViewList.get(position % imageViewList.size()));
            return imageViewList.get(position % imageViewList.size());
         }
       }

      @Override
      public void onPageScrollStateChanged(int arg0) {
         // TODO Auto-generated method stub
         
      }

      @Override
      public void onPageScrolled(int arg0, float arg1, int arg2) {
         // TODO Auto-generated method stub
         
      }

      @Override
      public void onPageSelected(int position) {
         // 改变图片的描述信息
         tvDescription.setText(imageDescriptions[position % imageViewList.size()]);
         // 切换选中的点
         llPoints.getChildAt(previousSelectPosition).setEnabled(false); // 把前一个点置为normal状态
         llPoints.getChildAt(position % imageViewList.size()).setEnabled(true);    // 把当前选中的position对应的点置为enabled状态
         previousSelectPosition = position  % imageViewList.size();
      }

   @Override
   public void setListener() {

   }

   @Override
   protected void onDestroy() {
      super.onDestroy();
      isLoop = false;
   }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值