android图片轮播

第一步,先写布局文件

[html] view
plain
copyprint?

  1. <com.main.util.SlideShowView   
  2.                 android:id="@+id/slideshowView"  
  3.                 android:layout_width="fill_parent"  
  4.                 android:layout_height="300dp"  
  5.                 android:layout_centerHorizontal="true"  
  6.                 />  

第二步,java代码

[java] view
plain
copyprint?

  1. package com.main.util;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import java.util.concurrent.Executors;  
  6. import java.util.concurrent.ScheduledExecutorService;  
  7. import java.util.concurrent.TimeUnit;  
  8.   
  9. import com.main.R;  
  10.   
  11. import android.content.Context;  
  12. import android.graphics.drawable.Drawable;  
  13. import android.os.Handler;  
  14. import android.os.Message;  
  15. import android.os.Parcelable;  
  16. import android.support.v4.view.PagerAdapter;  
  17. import android.support.v4.view.ViewPager;  
  18. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  19. import android.util.AttributeSet;  
  20. import android.view.LayoutInflater;  
  21. import android.view.View;  
  22. import android.widget.FrameLayout;  
  23. import android.widget.ImageView;  
  24. import android.widget.ImageView.ScaleType;  
  25.   
  26.   
  27. public class SlideShowView extends FrameLayout {  
  28.     //轮播图图片数量  
  29.     private final static int IMAGE_COUNT = 5;  
  30.     //自动轮播的时间间隔  
  31.     private final static int TIME_INTERVAL = 5;  
  32.     //自动轮播启用开关  
  33.     private final static boolean isAutoPlay = true;   
  34.       
  35.     //自定义轮播图的资源ID  
  36.     private int[] imagesResIds;  
  37.     //放轮播图片的ImageView 的list  
  38.     private List<ImageView> imageViewsList;  
  39.     //放圆点的View的list  
  40.     private List<View> dotViewsList;  
  41.       
  42.     private ViewPager viewPager;  
  43.     //当前轮播页  
  44.     private int currentItem  = 0;  
  45.     //定时任务  
  46.     private ScheduledExecutorService scheduledExecutorService;  
  47.     //Handler  
  48.     private Handler handler = new Handler(){  
  49.   
  50.         @Override  
  51.         public void handleMessage(Message msg) {  
  52.             // TODO Auto-generated method stub  
  53.             super.handleMessage(msg);  
  54.             viewPager.setCurrentItem(currentItem);  
  55.         }  
  56.           
  57.     };  
  58.       
  59.     public SlideShowView(Context context) {  
  60.         this(context,null);  
  61.         // TODO Auto-generated constructor stub  
  62.     }  
  63.     public SlideShowView(Context context, AttributeSet attrs) {  
  64.         this(context, attrs, 0);  
  65.         // TODO Auto-generated constructor stub  
  66.     }  
  67.     public SlideShowView(Context context, AttributeSet attrs, int defStyle) {  
  68.         super(context, attrs, defStyle);  
  69.         // TODO Auto-generated constructor stub  
  70.         initData();  
  71.         initUI(context);  
  72.         if(isAutoPlay){  
  73.             startPlay();  
  74.         }  
  75.           
  76.     }  
  77.     /** 
  78.      * 开始轮播图切换 
  79.      */  
  80.     private void startPlay(){  
  81.         scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();  
  82.         scheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 4, TimeUnit.SECONDS);  
  83.     }  
  84.     /** 
  85.      * 停止轮播图切换 
  86.      */  
  87.     private void stopPlay(){  
  88.         scheduledExecutorService.shutdown();  
  89.     }  
  90.     /** 
  91.      * 初始化相关Data 
  92.      */  
  93.     private void initData(){  
  94.         imagesResIds = new int[]{//图片数据  
  95.                 R.drawable.p1,    
  96.                 R.drawable.p2,  
  97.         };  
  98.         imageViewsList = new ArrayList<ImageView>();  
  99.         dotViewsList = new ArrayList<View>();  
  100.           
  101.     }  
  102.     /** 
  103.      * 初始化Views等UI 
  104.      */  
  105.     private void initUI(Context context){  
  106.         LayoutInflater.from(context).inflate(R.layout.imageviewpager, this, true);  
  107.         for(int imageID : imagesResIds){  
  108.             ImageView view =  new ImageView(context);  
  109.             view.setImageResource(imageID);  
  110.             view.setScaleType(ScaleType.FIT_XY);  
  111.             imageViewsList.add(view);  
  112.         }  
  113.         dotViewsList.add(findViewById(R.id.v_dot1));  
  114.         dotViewsList.add(findViewById(R.id.v_dot2));  
  115.           
  116.         viewPager = (ViewPager) findViewById(R.id.viewPager);  
  117.         viewPager.setFocusable(true);  
  118.           
  119.         viewPager.setAdapter(new MyPagerAdapter());  
  120.         viewPager.setOnPageChangeListener(new MyPageChangeListener());  
  121.     }  
  122.       
  123.     /** 
  124.      * 填充ViewPager的页面适配器 
  125.      * @author caizhiming 
  126.      */  
  127.     private class MyPagerAdapter  extends PagerAdapter{  
  128.   
  129.         @Override  
  130.         public void destroyItem(View container, int position, Object object) {  
  131.             // TODO Auto-generated method stub  
  132.             //((ViewPag.er)container).removeView((View)object);  
  133.             ((ViewPager)container).removeView(imageViewsList.get(position));  
  134.         }  
  135.   
  136.         @Override  
  137.         public Object instantiateItem(View container, int position) {  
  138.             // TODO Auto-generated method stub  
  139.             ((ViewPager)container).addView(imageViewsList.get(position));  
  140.             return imageViewsList.get(position);  
  141.         }  
  142.   
  143.         @Override  
  144.         public int getCount() {  
  145.             // TODO Auto-generated method stub  
  146.             return imageViewsList.size();  
  147.         }  
  148.   
  149.         @Override  
  150.         public boolean isViewFromObject(View arg0, Object arg1) {  
  151.             // TODO Auto-generated method stub  
  152.             return arg0 == arg1;  
  153.         }  
  154.         @Override  
  155.         public void restoreState(Parcelable arg0, ClassLoader arg1) {  
  156.             // TODO Auto-generated method stub  
  157.   
  158.         }  
  159.   
  160.         @Override  
  161.         public Parcelable saveState() {  
  162.             // TODO Auto-generated method stub  
  163.             return null;  
  164.         }  
  165.   
  166.         @Override  
  167.         public void startUpdate(View arg0) {  
  168.             // TODO Auto-generated method stub  
  169.   
  170.         }  
  171.   
  172.         @Override  
  173.         public void finishUpdate(View arg0) {  
  174.             // TODO Auto-generated method stub  
  175.               
  176.         }  
  177.           
  178.     }  
  179.     /** 
  180.      * ViewPager的监听器 
  181.      * 当ViewPager中页面的状态发生改变时调用 
  182.      * @author caizhiming 
  183.      */  
  184.     private class MyPageChangeListener implements OnPageChangeListener{  
  185.   
  186.         boolean isAutoPlay = false;  
  187.   
  188.         @Override  
  189.         public void onPageScrollStateChanged(int arg0) {  
  190.             // TODO Auto-generated method stub  
  191.             switch (arg0) {  
  192.             case 1:// 手势滑动,空闲中  
  193.                 isAutoPlay = false;  
  194.                 break;  
  195.             case 2:// 界面切换中  
  196.                 isAutoPlay = true;  
  197.                 break;  
  198.             case 0:// 滑动结束,即切换完毕或者加载完毕  
  199.                 // 当前为最后一张,此时从右向左滑,则切换到第一张  
  200.                 if (viewPager.getCurrentItem() == viewPager.getAdapter().getCount() - 1 && !isAutoPlay) {  
  201.                     viewPager.setCurrentItem(0);  
  202.                 }  
  203.                 // 当前为第一张,此时从左向右滑,则切换到最后一张  
  204.                 else if (viewPager.getCurrentItem() == 0 && !isAutoPlay) {  
  205.                     viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 1);  
  206.                 }  
  207.                 break;  
  208.         }  
  209.         }  
  210.   
  211.         @Override  
  212.         public void onPageScrolled(int arg0, float arg1, int arg2) {  
  213.             // TODO Auto-generated method stub  
  214.               
  215.         }  
  216.   
  217.         @Override  
  218.         public void onPageSelected(int pos) {  
  219.             // TODO Auto-generated method stub  
  220.               
  221.             currentItem = pos;  
  222.             for(int i=0;i < dotViewsList.size();i++){  
  223.                 if(i == pos){  
  224.                     ((View)dotViewsList.get(pos)).setBackgroundResource(R.drawable.dot_black);  
  225.                 }else {  
  226.                     ((View)dotViewsList.get(i)).setBackgroundResource(R.drawable.dot_white);  
  227.                 }  
  228.             }  
  229.         }  
  230.           
  231.     }  
  232.       
  233.     /** 
  234.      *执行轮播图切换任务 
  235.      *@author caizhiming 
  236.      */  
  237.     private class SlideShowTask implements Runnable{  
  238.   
  239.         @Override  
  240.         public void run() {  
  241.             // TODO Auto-generated method stub  
  242.             synchronized (viewPager) {  
  243.                 currentItem = (currentItem+1)%imageViewsList.size();  
  244.                 handler.obtainMessage().sendToTarget();  
  245.             }  
  246.         }  
  247.           
  248.     }  
  249.     /** 
  250.      * 销毁ImageView资源,回收内存 
  251.      * @author caizhiming 
  252.      */  
  253.     private void destoryBitmaps() {  
  254.   
  255.         for (int i = 0; i < IMAGE_COUNT; i++) {  
  256.             ImageView imageView = imageViewsList.get(i);  
  257.             Drawable drawable = imageView.getDrawable();  
  258.             if (drawable != null) {  
  259.                 //解除drawable对view的引用  
  260.                 drawable.setCallback(null);  
  261.             }  
  262.         }  
  263.     }  
  264.   
  265. }  
时间: 2024-08-06 10:20:57

android图片轮播的相关文章

Android 图片轮播实现及获取Android的资源信息

在手机app应用中我们经常会看到图片轮播动画效果,Android中想要实现图片轮播,主要用到ViewPager这个控件来实现,这个控件的主要功能是实现图片的滑动效果. 那么有了滑动,在滑动的基础上附上图片也就实现了图片轮播的效果...这个控件类似于ListView,需要使用到适配器这个东西,适配器在这里的作用是为轮播时设置一些效果...这里需要使用到PagerAdapter适配器...下面来一个例子,这个例子的效果是在图片轮播的同时显示播放的是第几张图片的信息...并且下面的点也是会随之进行变化

Android客户端实现图片轮播控件_Android

本文和大家一起写一个Android图片轮播控件,供大家参考,具体内容如下 1. 轮播控件的组成部分     我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成:        首先我们要有用来显示图片的View对象,根据上图中底部中央的5个点,我们知道需要5个ImageView来显示需要轮播的图片,另外还需要5个ImageView来显示5个点.现在考虑以下轮播组件应该具有的行为,首先需要每隔一定时间间隔切换到下一张图片,并且图片间切换的效果应该是平滑的,就像"翻书&qu

Android实现广告图片轮播效果_Android

本文实例介绍了Android广告轮播图效果实现方法,分享给大家供大家参考,具体内容如下 首先看下一下布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:

Android客户端实现图片轮播控件

本文和大家一起写一个Android图片轮播控件,供大家参考,具体内容如下 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用来显示图片的View对象,根据上图中底部中央的5个点,我们知道需要5个ImageView来显示需要轮播的图片,另外还需要5个ImageView来显示5个点.现在考虑以下轮播组件应该具有的行为,首先需要每隔一定时间间隔切换到下一张图片,并且图片间切换的效果应该是平滑的,就像"翻书"一样.由此我们可

Android零基础入门第49节:AdapterViewFlipper图片轮播

原文:Android零基础入门第49节:AdapterViewFlipper图片轮播    上一期学习了ExpandableListView的使用,你已经掌握了吗?本期开始学习AdapterViewFilpper的使用.       一.认识AdapterViewFilpper       AdapterViewFilpper 继承 了AdapterViewAnimator,它也会显示 Adapter 提供的多个 View 组件,但它每次只能显示一个View组件,程序可通过showPreviou

android中的webview不能正常显示获取到的网页的图片轮播效果

问题描述 android中的webview不能正常显示获取到的网页的图片轮播效果 写了一个Android客户端软件,里边有个webview控件,获取到服务端的网页时出问题了. 网页上有个类似于HeadView的图片轮播效果,但是在客户端webview中不能正常显示. 解决方案 那你能将代码贴出来吗,这样猜不好猜的http://www.codesky.net/showhtml/26836.htm 上面的链接是一个关于webview显示获取到的网页图片轮播效果的源代码,你可以下载下来看看,然后找出自

图片轮播,不知道这是什么错误啊啊 android

问题描述 图片轮播,不知道这是什么错误啊啊 android 解决方案 ImageLoader需要初始化有没有初始化语句,详细的参数设置可以看ImageLoader的配置文档 //创建默认的ImageLoader配置参数 ImageLoaderConfiguration configuration = ImageLoaderConfiguration .createDefault(this); //Initialize ImageLoader with configuration. ImageLo

Android开发之滑动图片轮播标题焦点_Android

先给大家这是下效果图: 谷歌提供的v4包,ViewPager 在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域 在布局文件中,布置标题描述部分 线性布局,竖向排列,背景色黑色半透明,这个布局和上面的ViewPager底部对齐layout_alignBottom="@id/xxx" <TextView/>居中显示, 小点部分,先放过空的LinearLayout,id是ll_points在代码中对其

Android ViewPager实现图片轮播效果_Android

在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的position+1即可.先来看看效果图吧:   就是实现这样的一个轮播广告的效果. 因为这个是自己为了练习仿照某旅游类App做的,所以这里的数据是使用抓包工具抓取的,准备数据等工作就不在这里赘述了,反正数据的添加大体都是相同的.我的思路是这样的,从网络上实时的获取数据(当然你也可以将数据写死),然后通过