zoukankan      html  css  js  c++  java
  • ViewPager—02图片无限轮播

    布局文件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        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/vp"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    
            <LinearLayout
                android:id="@+id/ll_point"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerInParent="true"
                android:layout_marginBottom="20dp"
                android:orientation="horizontal" />
        </RelativeLayout>
    
    </RelativeLayout>

    相关代码

      1 public class MainActivity extends Activity {
      2 
      3     private ViewPager mViewPager;
      4     private LinearLayout mLlPoint;
      5     private MyAdapter mAdapter;
      6 
      7     private int[] ids = {R.drawable.a1,R.drawable.a2,R.drawable.a3};
      8     private List<ImageView> mImages;
      9     private int lastPos;
     10     private boolean isRunning;
     11 
     12     private Handler mHandler = new Handler() {
     13         public void handleMessage(android.os.Message msg) {
     14             switch(msg.what){
     15             case 0:
     16 
     17                 mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
     18 
     19                 if (isRunning) {
     20                     mHandler.sendEmptyMessageDelayed(0,3000);
     21                 }
     22 
     23                 break;
     24 
     25             default:
     26                 break;
     27             }
     28         };
     29     };
     30 
     31     @Override
     32     protected void onCreate(Bundle savedInstanceState) {
     33         super.onCreate(savedInstanceState);
     34         setContentView(R.layout.activity_main);
     35 
     36         initView();
     37         initData();
     38 
     39         mAdapter = new MyAdapter();
     40         mViewPager.setAdapter(mAdapter);
     41         mViewPager.addOnPageChangeListener(new PagerChnageListener());
     42         mViewPager.setCurrentItem((mImages.size()) * 1000);
     43 
     44         isRunning = true;
     45         mHandler.sendEmptyMessageDelayed(0,3000);
     46     }
     47 
     48     private void initView() {
     49         mViewPager = (ViewPager)findViewById(R.id.vp);
     50         mLlPoint = (LinearLayout)findViewById(R.id.ll_point);
     51     }
     52 
     53     private void initData() {
     54 
     55         mImages = new ArrayList<ImageView>();
     56 
     57         for (int i = 0;i < ids.length;i++) {
     58             ImageView iv = new ImageView(this);
     59             iv.setBackgroundResource(ids[i]);
     60             mImages.add(iv);
     61 
     62             View view = new View(this);
     63             view.setBackgroundResource(R.drawable.point_selector);
     64             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Utils.dip2px(this,10),
     65                     Utils.dip2px(this,10));
     66             if (i != 0) {
     67                 params.leftMargin = 20;
     68                 view.setEnabled(false);
     69             }else {
     70                 view.setEnabled(true);
     71             }
     72             view.setLayoutParams(params);
     73             mLlPoint.addView(view);
     74         }
     75     }
     76 
     77     class MyAdapter extends PagerAdapter {
     78 
     79         @Override
     80         public int getCount() {
     81             return Integer.MAX_VALUE;
     82         }
     83 
     84         @Override
     85         public boolean isViewFromObject(View arg0,Object arg1) {
     86             return arg0 == arg1;
     87         }
     88 
     89         @Override
     90         public Object instantiateItem(ViewGroup container,int position) {
     91             ImageView view = mImages.get(position % mImages.size());
     92 
     93             // 增加异常扑捉防止空白页
     94             try {
     95                 ((ViewPager)container).addView(view,0);
     96             }catch(Exception e) {
     97                 e.printStackTrace();
     98             }
     99             return view;
    100         }
    101 
    102         @Override
    103         public void destroyItem(ViewGroup container,int position,Object object) {
    104             // 防止2/3个出现BUG
    105             // container.removeView(mImages.get(position % mImages.size()));
    106         }
    107     }
    108 
    109     class PagerChnageListener implements OnPageChangeListener {
    110 
    111         /* state: 0空闲,1是滑行中,2加载完毕 */
    112         @Override
    113         public void onPageScrollStateChanged(int state) {
    114             switch(state){
    115             case 0:
    116                 isRunning = true;
    117                 break;
    118             case 1:
    119                 isRunning = false;
    120                 break;
    121             case 2:
    122                 isRunning = true;
    123                 break;
    124 
    125             default:
    126                 break;
    127             }
    128         }
    129 
    130         @Override
    131         public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
    132 
    133         }
    134 
    135         @Override
    136         public void onPageSelected(int position) {
    137             int pos = position % mImages.size();
    138             mLlPoint.getChildAt(lastPos).setEnabled(false);
    139             mLlPoint.getChildAt(pos).setEnabled(true);
    140             lastPos = pos;
    141         }
    142     }
    143 
    144     @Override
    145     protected void onDestroy() {
    146         super.onDestroy();
    147         isRunning = false;
    148         mHandler.removeCallbacksAndMessages(null);
    149     }
    150 }

     

     效果图

  • 相关阅读:
    Beta-Scum meeting 2
    项目展示
    发布声明
    [敏杰开发]Beta Scrum Meeting 5
    [敏杰开发]Beta Scrum Meeting 4
    [敏杰开发]Beta Scrum Meeting 3
    [敏杰开发]Beta Scrum Meeting 2
    [敏杰开发]Beta Scrum Meeting 1
    [敏杰开发]团队免转会申请
    [知识路书]项目展示
  • 原文地址:https://www.cnblogs.com/yangang2013/p/4912114.html
Copyright © 2011-2022 走看看