android 广告页轮播

 这是为了记录自己写的模块化代码  以后好用 直接用

首先当然啥布局界面用到ViewPager这个控件,这是v4包下面的  如果你项目报错则首先看看导没导v4包

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
     tools:context=".MainActivity">

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
            <!-- ViewPager是一个控件 -->
            <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_below="@id/adv_pager"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="-25px"
                android:gravity="right"
                android:orientation="horizontal" >
            </LinearLayout>
        </RelativeLayout>

    </LinearLayout>


其次主界面代码 后面都会有详细的注释 关键地方我会解释  虽然有时候解释的不是很清楚


public class MainActivity extends AppCompatActivity {
    
//存放轮播图小圆点的数组
    private ImageView[] imageViews = null;
//轮播图片的imageView
    private ImageView imageView = null;
//放轮播图片的容器ViewPager 
    private ViewPager advPager = null;
    private AtomicInteger what = new AtomicInteger(0);

    private boolean isContinue = true;
    //      这里存放的是四张广告背景
    List<View> advPics = new ArrayList<View>();


    private EditText edit_query;
    private TextView text;
    private Button btn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //初始化ViewPager
        initViewPager();

    }


    private void initViewPager() {
//得到控件
        advPager= (ViewPager) findViewById(R.id.adv_pager);
        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);

//有几张图片就几个view
        ImageView img1 = new ImageView(this);
        img1.setBackgroundResource(R.drawable.tu1);
        advPics.add(img1);


        ImageView img2 = new ImageView(this);
        img2.setBackgroundResource(R.drawable.tu2);
        advPics.add(img2);


        ImageView img3 = new ImageView(this);
        img3.setBackgroundResource(R.drawable.tu3);
        advPics.add(img3);


        ImageView img4 = new ImageView(this);
        img4.setBackgroundResource(R.drawable.tu4);
        advPics.add(img4);


        //      对imageviews进行填充
        imageViews = new ImageView[advPics.size()];
        //小图标
        for (int i = 0; i < advPics.size(); i++) {
            imageView = new ImageView(this);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));
            imageView.setPadding(5, 5, 5, 5);
            imageViews[i] = imageView;
            if (i == 0) {
                imageViews[i]
                        .setBackgroundResource(R.drawable.dian);
            } else {
                imageViews[i]
                        .setBackgroundResource(R.drawable.dian1);
            }
            group.addView(imageViews[i]);
        }
//设置适配器,就把它写一个类里面,按理 应该分开这样解耦性比较好
        advPager.setAdapter(new AdvAdapter(advPics));

//设置ViewPager监听事件
        advPager.addOnPageChangeListener(new GuidePageChangeListener());

//设置ViewPager触摸监听
        advPager.setOnTouchListener(new View.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(-4);
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {


        }
    }
    private final Handler viewHandler = new Handler() {


        @Override
        public void handleMessage(Message msg) {
            advPager.setCurrentItem(msg.what);
            super.handleMessage(msg);
        }


    };


    private class AdvAdapter extends PagerAdapter {
        private List<View>list;


        public AdvAdapter(List<View> list) {
            this.list = list;
        }
// 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量
        @Override
        public int getCount() {
            return list.size();
        }
        // 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }
// 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可


        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(list.get(position),0);
            return list.get(position);
        }


        // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(list.get(position));
        }
    }


    private class GuidePageChangeListener implements ViewPager.OnPageChangeListener {

//当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到,其中三个参数分别代表,(当前页面,及你点击滑动的页面),
://(当前页面偏移的百分比)-----(当前页面偏移的像素位置)
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {


        }

// 此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)。
        @Override
        public void onPageSelected(int position) {
            what.addAndGet(position);
            for (int i = 0; i < imageViews.length; i++) {
                imageViews[position]
                        .setBackgroundResource(R.drawable.dian);
                if (position != i) {
                    imageViews[i]
                            .setBackgroundResource(R.drawable.dian1);
                }


            }
        }
//此方法是在状态改变的时候调用,其中这个int值,有三种状态,0的时候什么也没做,1的时候正在滑动,2的时候滑动完毕
        @Override
        public void onPageScrollStateChanged(int state) {


        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值