`

带指示点Viewpaper图片轮播

阅读更多

功能:带指示点Viewpaper图片轮播(无限轮播)

效果图:

 

 

主要实现代码:
 

package com.eyeandroid.viewpager;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    private ImageView[] imageViews = null;//用于显示指示点
    private ImageView imageView = null;
    private ViewPager advPager = null;
    //AtomicInteger,一个提供原子操作的Integer的类。
    //在Java语言中,++i和i++操作并不是线程安全的,
    //在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
    private AtomicInteger what = new AtomicInteger(0);
    private boolean isContinue = true;//判断是否轮播
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initViewPager();
    }
 
 
    private void initViewPager() {
        advPager = (ViewPager) findViewById(R.id.adv_pager);
        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
        //用于存放轮播的图片
        List<View> advPics = new ArrayList<View>();
        
        ImageView img1 = new ImageView(this);
        img1.setBackgroundResource(R.drawable.pic1);
        advPics.add(img1);
 
        ImageView img2 = new ImageView(this);
        img2.setBackgroundResource(R.drawable.pic2);
        advPics.add(img2);
 
        ImageView img3 = new ImageView(this);
        img3.setBackgroundResource(R.drawable.pic3);
        advPics.add(img3);
 
        ImageView img4 = new ImageView(this);
        img4.setBackgroundResource(R.drawable.pic4);
        advPics.add(img4);
         
        imageViews = new ImageView[advPics.size()];
 
        for (int i = 0; i < advPics.size(); i++) {
            imageView = new ImageView(this);
            imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            imageViews[i] = imageView;
            if (i == 0) {
                imageViews[i].setBackgroundResource(R.drawable.advertising_point_h);
            } else {
                imageViews[i].setBackgroundResource(R.drawable.advertising_point);
            }
            group.addView(imageViews[i]);
        }
 
        advPager.setAdapter(new AdvAdapter(advPics));
        advPager.setOnPageChangeListener(new GuidePageChangeListener());
        advPager.setOnTouchListener(new OnTouchListener() {
             
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                    isContinue = false;
                    break;
                case MotionEvent.ACTION_UP:
                    isContinue = true;
                    break;
                default:
                    isContinue = true;
                    break;
                }
                return false;
            }
        });
         
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    if (isContinue) {
                        viewHandler.sendEmptyMessage(what.get());
                        whatOption();
                    }
                }
            }
        }).start();
    }
 
    private void whatOption() {
        //获取当前的值,并自增
        what.incrementAndGet(); 
        if (what.get() > imageViews.length - 1) {
            //获取当前的值,并减少
            what.getAndAdd(-imageViews.length);
        }
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
             
        }
    }
 
    private final Handler viewHandler = new Handler() {
 
        @Override
        public void handleMessage(Message msg) {
            advPager.setCurrentItem(msg.what);
            super.handleMessage(msg);
        }
 
    };
 
    private final class GuidePageChangeListener implements OnPageChangeListener {
 
        @Override
        public void onPageScrollStateChanged(int arg0) {
 
        }
 
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
 
        }
 
        @Override
        public void onPageSelected(int arg0) {
            what.getAndSet(arg0);
            for (int i = 0; i < imageViews.length; i++) {
                imageViews[arg0]
                        .setBackgroundResource(R.drawable.advertising_point_h);
                if (arg0 != i) {
                    imageViews[i]
                            .setBackgroundResource(R.drawable.advertising_point);
                }
            }
 
        }
 
    }
 
    private final class AdvAdapter extends PagerAdapter {
        private List<View> views = null;
 
        public AdvAdapter(List<View> views) {
            this.views = views;
        }
 
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView(views.get(arg1));
        }
 
        @Override
        public void finishUpdate(View arg0) {
 
        }
 
        @Override
        public int getCount() {
            return views.size();
        }
 
        @Override
        public Object instantiateItem(View arg0, int arg1) {
            ((ViewPager) arg0).addView(views.get(arg1), 0);
            views.get(arg1).setOnClickListener(new View.OnClickListener() {
                 
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"选中了第"+advPager.getCurrentItem()+"张图片" , Toast.LENGTH_SHORT).show();
                     
                }
            });
            return views.get(arg1);
        }
 
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }
 
        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
 
        }
 
        @Override
        public Parcelable saveState() {
            return null;
        }
 
        @Override
        public void startUpdate(View arg0) {
 
        }
 
    }
 
}

 

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
 
        <android.support.v4.view.ViewPager
            android:id="@+id/adv_pager"
            android:layout_width="fill_parent"
            android:layout_height="160dp" >
        </android.support.v4.view.ViewPager>
         
        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:paddingBottom="2dp"
            android:gravity="center"
            android:orientation="horizontal" >
        </LinearLayout>
 
</FrameLayout>

 

  • 大小: 63.3 KB
2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics