Android客户端开发中很多时候需要用到轮播图的方式进行重点新闻的推送或者欢迎页面的制作,下面这个轮播图效果的Deamo来自互联网再经过修改而成。

  1、布局文件activity_main.xml中添加如下内容

<android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="wrap_content"        android:layout_height="200dip" />    <LinearLayout        android:layout_alignBottom="@id/viewPager"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#33000000"        android:orientation="vertical" >        <TextView            android:id="@+id/image_desc"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center"            android:text="@string/app_name"            android:textColor="@android:color/white"            android:textSize="18sp" />        <LinearLayout            android:id="@+id/point_group"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:orientation="horizontal"            >        LinearLayout>    LinearLayout>

  2、java代码

  添加属性

    private ViewPager viewPager;    private LinearLayout point_group;    private TextView image_desc;    // 图片资源id    private final int[] images = {R.drawable.a, R.drawable.b, R.drawable.c,            R.drawable.d, R.drawable.e};    // 图片标题集合    private final String[] imageDescriptions = {"第一张图片",            "第二张图片", "第三张图片", "第四张图片", "第五张图片"};    private ArrayList imageList;    // 上一个页面的位置    protected int lastPosition = 0;    // 判断是否自动滚动viewPager    private boolean isRunning = true;    private Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            // 执行滑动到下一个页面            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);            if (isRunning) {                // 在发一个handler延时                handler.sendEmptyMessageDelayed(0, 5000);            }        }    };

  onCreate中添加如下内容

        viewPager = (ViewPager) findViewById(R.id.viewPager);        point_group = (LinearLayout) findViewById(R.id.point_group);        image_desc = (TextView) findViewById(R.id.image_desc);        image_desc.setText(imageDescriptions[0]);        // 初始化图片资源        imageList = new ArrayList();        for (int i : images) {            // 初始化图片资源            ImageView imageView = new ImageView(this);            imageView.setBackgroundResource(i);            imageList.add(imageView);            // 添加指示小点            ImageView point = new ImageView(this);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100,                    15);            params.rightMargin = 20;            params.bottomMargin = 10;            point.setLayoutParams(params);            point.setBackgroundResource(R.drawable.point_bg);            if (i == R.drawable.a) {                //默认聚焦在第一张                point.setBackgroundResource(R.drawable.point_bg_focus);                point.setEnabled(true);            } else {                point.setEnabled(false);            }            point_group.addView(point);        }        viewPager.setAdapter(new MyPageAdapter());        // 设置当前viewPager的位置        viewPager.setCurrentItem(Integer.MAX_VALUE / 2                - (Integer.MAX_VALUE / 2 % imageList.size()));        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageSelected(int position) {                // 页面切换后调用, position是新的页面位置                // 实现无限制循环播放                position %= imageList.size();                image_desc.setText(imageDescriptions[position]);                // 把当前点设置为true,将上一个点设为false;并设置point_group图标                point_group.getChildAt(position).setEnabled(true);                point_group.getChildAt(position).setBackgroundResource(R.drawable.point_bg_focus);//设置聚焦时的图标样式                point_group.getChildAt(lastPosition).setEnabled(false);                point_group.getChildAt(lastPosition).setBackgroundResource(R.drawable.point_bg);//上一张恢复原有图标                lastPosition = position;            }            @Override            public void onPageScrolled(int position, float positionOffset,                                       int positionOffsetPixels) {                // 页面正在滑动时间回调            }            @Override            public void onPageScrollStateChanged(int state) {                // 当pageView 状态发生改变的时候,回调            }        });        /**         * 自动循环: 1.定时器:Timer 2.开子线程:while true循环 3.ClockManger         * 4.用Handler发送延时信息,实现循环,最简单最方便         *         */        handler.sendEmptyMessageDelayed(0, 3000);

  实现onDestroy方法

    @Override    protected void onDestroy() {// 停止滚动        isRunning = false;        super.onDestroy();    }

  定义PagerAdapter子类

    private class MyPageAdapter extends PagerAdapter {        // 需要实现以下四个方法        @Override        public int getCount() {            // 获得页面的总数            return Integer.MAX_VALUE;        }        @Override        public boolean isViewFromObject(View view, Object object) {            // 判断view和Object对应是否有关联关系            if (view == object) {                return true;            } else {                return false;            }        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            // 获得相应位置上的view; container view的容器,其实就是viewpage自身,            // position: viewpager上的位置            // 给container添加内容            container.addView(imageList.get(position % imageList.size()));            return imageList.get(position % imageList.size());        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            // 销毁对应位置上的Object            // super.destroyItem(container, position, object);            container.removeView((View) object);            object = null;        }    }

  最后编译运行即可,代码分享在这:http://files.cnblogs.com/files/rwxwsblog/ViewPagerDeamo.zip

更多相关文章

  1. android实现异步加载图片
  2. Android(安卓)APP - GPS定位并获取地理位置
  3. android Q 使用 ACTION_OPEN_DOCUMENT_TREE 选择目录进行遍历文
  4. android(8) ViewPager页面滑动切换
  5. Android(安卓)Bitmap 保存图片透明背景变黑色背景
  6. Android(安卓)中文 API 文档 (45) —— AbsoluteLayout.LayoutPara
  7. android获取网络图片过大的问题
  8. android(2) 功能引导界面实现
  9. [android] ScrollView 设置滚动条的初始位置

随机推荐

  1. Android(安卓)使用ColorMatrix改变图片颜
  2. android 修改手机型号刷单
  3. 关于微信中直接调起 Native App 的调研报
  4. Android(安卓)Studio精彩案例(一)《Actio
  5. Android中的缓存策略—拉取网络图片,缓存
  6. android二维码生成器 艺术二维码
  7. Android中合多图片和文字合成PDF文件---
  8. android 仿IOS添加小组件的拖拽排序列表,
  9. Android(安卓)2.0环境下的图标设计原则
  10. Android(安卓)实现密码键盘的相关知识点