zoukankan      html  css  js  c++  java
  • Android自定义控件6--轮播图广告的实现

    本文接着实现轮播图广告的监听滚动

    本文地址:http://www.cnblogs.com/wuyudong/p/5920757.html,转载请注明源地址。

    首先添加布局文件,实现小白点

    shape_bg_point_enable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
    
        <corners android:radius="5dp" />
        <solid android:color="@android:color/white" />
    </shape>

    shape_bg_point_disable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
    
        <corners android:radius="5dp" />
        <solid android:color="@android:color/darker_gray" />
    
    </shape>

    再添加一个selector

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_enabled="true" android:drawable="@drawable/shape_bg_point_enable"></item>
        <item android:state_enabled="false" android:drawable="@drawable/shape_bg_point_disable"></item>
    
    </selector>

    将selector添加到视图:

            for (int i = 0; i < imageResIds.length; i++) {
                imageView = new ImageView(this);
                imageView.setBackgroundResource(imageResIds[i]);
                imageViewList.add(imageView);
    
                // 加小白点,指示器
                pointView = new View(this);
                pointView.setBackgroundResource(R.drawable.selector_bg_point);
                layoutParams = new LayoutParams(7, 7);
                if (i != 0) {
                    layoutParams.leftMargin = 10;
                }
                pointView.setEnabled(false);
    
                ll_point_container.addView(pointView, layoutParams);
            }

    为ViewPager添加滑动监听

    public class MainActivity extends Activity implements OnPageChangeListener 
    ......
        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels) {
            // 滚动时调用
        }
    
        @Override
        public void onPageSelected(int position) {
            // 新条目被选中时调用
            position = position % 5;
            tv_desc.setText(contentDesc[position]);
            // 把之前的禁用,把最新的启用
            ll_point_container.getChildAt(lastEnablePoint).setEnabled(false);
            ll_point_container.getChildAt(position).setEnabled(true);
            lastEnablePoint = position;
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
            // 滚动状态变化时调用
    
        }

    开启页面自动轮询:

            //开启轮询
            new Thread() {
                public void run() {
                    while(isRunning) {
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        //往下跳一位
                        runOnUiThread(new Runnable() {
                            
                            @Override
                            public void run() {
                                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                            }
                        });
                    }
                    
                };
                
                
            }.start();

    完整代码如下:

    package com.wuyudong.viewpager;
    
    import java.util.ArrayList;
    
    import android.R.layout;
    import android.os.Bundle;
    import android.app.Activity;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.LinearLayout.LayoutParams;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements OnPageChangeListener {
    
        private ViewPager viewPager;
        private int[] imageResIds;
        private ArrayList<ImageView> imageViewList;
        private ArrayList<View> pointViews;
        private LinearLayout ll_point_container;
        private String[] contentDesc;
        private TextView tv_desc;
        private int lastEnablePoint = 0;
        private boolean isRunning = true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 初始化布局 View 视图
            initViews();
    
            // Model 数据
            initData();
    
            // Controller 控制器
            initAdapter();
            
            //开启轮询
            new Thread() {
                public void run() {
                    while(isRunning) {
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        //往下跳一位
                        runOnUiThread(new Runnable() {
                            
                            @Override
                            public void run() {
                                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                            }
                        });
                    }
                    
                };
                
                
            }.start();
    
        }
        
        @Override
        protected void onDestroy() {
            super.onDestroy();
            isRunning = false;
        }
    
        private void initViews() {
            viewPager = (ViewPager) findViewById(R.id.viewpager);
            viewPager.setOnPageChangeListener(this);// 设置滚动更新
    
            tv_desc = (TextView) findViewById(R.id.tv_desc);
    
            ll_point_container = (LinearLayout) findViewById(R.id.ll_point_container);
    
        }
    
        private void initAdapter() {
            ll_point_container.getChildAt(0).setEnabled(true);
            tv_desc.setText(contentDesc[0]);
            // 设置适配器
            viewPager.setAdapter(new MyAdapter());
            
            //默认设置到中间的某个位置
            int pos = Integer.MAX_VALUE / 2;
            //viewPager.setCurrentItem(pos - 3);
            viewPager.setCurrentItem(5000000);
        }
    
        private void initData() {
    
            // 初始化要显示的数据
            // 图片资源id数组
            imageResIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,
                    R.drawable.d, R.drawable.e };
            // 文本描述
            contentDesc = new String[] { "巩俐不低俗,我就不能低俗", "朴树又回来啦!再唱经典老歌引万人大合唱",
                    "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
            imageViewList = new ArrayList<ImageView>();
            pointViews = new ArrayList<View>();
            ImageView imageView;
            View pointView;
            LayoutParams layoutParams;
            for (int i = 0; i < imageResIds.length; i++) {
                imageView = new ImageView(this);
                imageView.setBackgroundResource(imageResIds[i]);
                imageViewList.add(imageView);
    
                // 加小白点,指示器
                pointView = new View(this);
                pointView.setBackgroundResource(R.drawable.selector_bg_point);
                layoutParams = new LayoutParams(7, 7);
                if (i != 0) {
                    layoutParams.leftMargin = 10;
                }
                pointView.setEnabled(false);
    
                ll_point_container.addView(pointView, layoutParams);
            }
    
        }
    
        class MyAdapter extends PagerAdapter {
    
            @Override
            public int getCount() {
                return Integer.MAX_VALUE;
            }
    
            // 3、指定复用的判断逻辑
            @Override
            public boolean isViewFromObject(View view, Object object) {
                // 当滑到新的条目,又返回来,view是否可以被复用
                return view == object;
            }
    
            // 1、返回要显示的条目内容,创建条目
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                // container:容器:ViewPager
                // position:当前要显示的条目的位置
                position = position % 5;
                ImageView imageView = imageViewList.get(position);
                System.out.println("instantItem创建:" + position);
                // a、把view对象添加到container中
                container.addView(imageView);
                // b、把view对象返回给框架,适配器
                return imageView; // 必须要重写,否则抛异常
            }
    
            // 2、销毁条目
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                // object 要销毁的对象
                System.out.println("destroyItem销毁:" + position);
                container.removeView((View) object);
            }
    
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels) {
            // 滚动时调用
        }
    
        @Override
        public void onPageSelected(int position) {
            // 新条目被选中时调用
            position = position % 5;
            tv_desc.setText(contentDesc[position]);
            // 把之前的禁用,把最新的启用
            ll_point_container.getChildAt(lastEnablePoint).setEnabled(false);
            ll_point_container.getChildAt(position).setEnabled(true);
            lastEnablePoint = position;
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
            // 滚动状态变化时调用
    
        }
    }
  • 相关阅读:
    如何 Laravel 中验证 zip 压缩包里的文件?
    PHP7的Yaconf使用教程
    算法与数据结构系列 ( 三 )
    推荐10个优质的Laravel扩展
    如何在利用 Composer 注册全局辅助函数?
    ThinkPHP6新增‘’多应用‘’与ThinkPHP5有啥区别
    基于Laravel开发的在线点播系统MeEdu
    浅述PHP7底层设计01-PHP7语言执行原理
    laravel单文件、多文件上传的实现方法
    在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5920757.html
Copyright © 2011-2022 走看看