Android 带圆点的自动轮播

来源:互联网 发布:ant 构建java web项目 编辑:程序博客网 时间:2024/05/16 15:59


要实现这个功能很简单,首先,循环创建和图片一样数量的圆点,判断设置第一个圆点为白色其他的为透明的,

[java] view plain copy
  1. for(int i = 0;i<li.size();i++){  
  2.             ImageView iv = new ImageView(MainActivity.this);  
  3.             //循环创建小圆点,判断第一个小圆点为白色的,其他的都是透明的  
  4.             if(i == 0){  
  5.                 iv.setBackgroundResource(R.drawable.circle_white);  
  6.             }else{  
  7.                 iv.setBackgroundResource(R.drawable.circle_transparent);  
  8.             }  
  9.             main_lin.addView(iv);  
  10.               
  11.             //设置小圆点的margin值  
  12.             LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1);   
  13.             lp.setMargins(510510);  
  14.             iv.setLayoutParams(lp);  
  15.         }  

设置gallery滚动时候切换小圆点

[java] view plain copy
  1. //设置滚动图片的时候,对应小圆点的图片切换  
  2.         main_gallery.setOnItemSelectedListener(new OnItemSelectedListener() {  
  3.   
  4.             @Override  
  5.             public void onItemSelected(AdapterView<?> parent, View view,  
  6.                     int position, long id) {  
  7.                 View v = main_lin.getChildAt(position);  
  8.                 View cuview = main_lin.getChildAt(current_circle);  
  9.                   
  10.                 if(v != null && cuview != null){  
  11.                     ImageView pointView = (ImageView) v;  
  12.                     ImageView curpointView = (ImageView) cuview;  
  13.                     curpointView  
  14.                             .setBackgroundResource(R.drawable.circle_transparent);  
  15.                     pointView  
  16.                             .setBackgroundResource(R.drawable.circle_white);  
  17.                     current_circle = position;  
  18.                 }  
  19.                   
  20.             }  
  21.   
  22.             @Override  
  23.             public void onNothingSelected(AdapterView<?> parent) {  
  24.                   
  25.             }  
  26.         });  


设置定时器自动播放图片

[java] view plain copy
  1. //设置轮播定时器  
  2.         timeadv = new Runnable() {  
  3.               
  4.             @Override  
  5.             public void run() {  
  6.                 //获取当前的图片是哪一张图片,图片的序号,  
  7.                 count = main_gallery.getSelectedItemPosition();  
  8.                 //当前滚动的图片序号大于多有的图片的数量,就跳转到第一张图片,否则就跳转到下一张图片  
  9.                 if(count+1>=li.size()){  
  10.                     count = 0;  
  11.                 }else{  
  12.                     count = count+1;  
  13.                 }  
  14.                 main_gallery.setSelection(count);  
  15.                 handler.postDelayed(this1000);  
  16.                   
  17.             }  
  18.         };  

开启定时器

[java] view plain copy
  1. //开启定时器,1000毫秒切换一次图片  
  2.         handler.postDelayed(timeadv, 1000);  

关闭activity时,关闭定时器

[java] view plain copy
  1. @Override  
  2.     public void onDestroy() {  
  3.         //关闭activity时,关闭定时器  
  4.         if(handler != null){  
  5.             //判断定时器时候为null,!null就销毁  
  6.             if(timeadv != null){  
  7.                 handler.removeCallbacks(timeadv);  
  8.             }  
  9.         }  
  10.         super.onDestroy();  
  11.     }  



所有的源码:
xml文件

[html] view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <RelativeLayout  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="200dp" >  
  10.   
  11.         <Gallery  
  12.             android:id="@+id/main_gallery"  
  13.             android:layout_width="match_parent"  
  14.             android:layout_height="match_parent" />  
  15.   
  16.         <LinearLayout  
  17.             android:id="@+id/main_lin"  
  18.             android:layout_width="wrap_content"  
  19.             android:layout_height="wrap_content"  
  20.             android:layout_alignParentBottom="true"  
  21.             android:layout_centerHorizontal="true"  
  22.             android:layout_marginBottom="5dp"  
  23.             android:gravity="center_horizontal"  
  24.             android:orientation="horizontal" >  
  25.         </LinearLayout>  
  26.     </RelativeLayout>  
  27.   
  28. </LinearLayout>  

item文件

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.       
  7.     <ImageView   
  8.         android:id="@+id/gallery_iv"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="match_parent"  
  11.         android:scaleType="fitXY"  
  12.         />  
  13.   
  14. </LinearLayout>  

activity文件

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.view.View;  
  6. import android.widget.AdapterView;  
  7. import android.widget.AdapterView.OnItemSelectedListener;  
  8. import android.widget.Gallery;  
  9. import android.widget.ImageView;  
  10. import android.widget.LinearLayout;  
  11. import android.app.Activity;  
  12.   
  13. public class MainActivity extends Activity {  
  14.       
  15.     Gallery main_gallery;  
  16.     LinearLayout main_lin;  
  17.       
  18.     List<Object> li;  
  19.       
  20.     Integer[] res = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};  
  21.       
  22.     Gallery_adapter gallery_adapter;  
  23.       
  24.     int current_circle = 0;  
  25.       
  26.     Runnable timeadv;  
  27.     int count;  
  28.   
  29.     Handler handler = new Handler();  
  30.       
  31.     @Override  
  32.     protected void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.activity_main);  
  35.           
  36.         initview();  
  37.         li = new ArrayList<Object>();  
  38.         for(int i = 0;i<res.length;i++){  
  39.             li.add(res[i]);  
  40.         }  
  41.           
  42.         gallery_adapter = new Gallery_adapter(this);  
  43.           
  44.         main_gallery.setAdapter(gallery_adapter);  
  45.         gallery_adapter.setList(li);  
  46.         setCircle();  
  47.           
  48.         //设置滚动图片的时候,对应小圆点的图片切换  
  49.         main_gallery.setOnItemSelectedListener(new OnItemSelectedListener() {  
  50.   
  51.             @Override  
  52.             public void onItemSelected(AdapterView<?> parent, View view,  
  53.                     int position, long id) {  
  54.                 View v = main_lin.getChildAt(position);  
  55.                 View cuview = main_lin.getChildAt(current_circle);  
  56.                   
  57.                 if(v != null && cuview != null){  
  58.                     ImageView pointView = (ImageView) v;  
  59.                     ImageView curpointView = (ImageView) cuview;  
  60.                     curpointView  
  61.                             .setBackgroundResource(R.drawable.circle_transparent);  
  62.                     pointView  
  63.                             .setBackgroundResource(R.drawable.circle_white);  
  64.                     current_circle = position;  
  65.                 }  
  66.                   
  67.             }  
  68.   
  69.             @Override  
  70.             public void onNothingSelected(AdapterView<?> parent) {  
  71.                   
  72.             }  
  73.         });  
  74.           
  75.         //设置轮播定时器  
  76.         timeadv = new Runnable() {  
  77.               
  78.             @Override  
  79.             public void run() {  
  80.                 //获取当前的图片是哪一张图片,图片的序号,  
  81.                 count = main_gallery.getSelectedItemPosition();  
  82.                 //当前滚动的图片序号大于多有的图片的数量,就跳转到第一张图片,否则就跳转到下一张图片  
  83.                 if(count+1>=li.size()){  
  84.                     count = 0;  
  85.                 }else{  
  86.                     count = count+1;  
  87.                 }  
  88.                 main_gallery.setSelection(count);  
  89.                 handler.postDelayed(this1000);  
  90.                   
  91.             }  
  92.         };  
  93.           
  94.         //开启定时器,1000毫秒切换一次图片  
  95.         handler.postDelayed(timeadv, 1000);  
  96.     }  
  97.       
  98.     private void initview() {  
  99.         main_gallery = (Gallery) this.findViewById(R.id.main_gallery);  
  100.         main_lin = (LinearLayout) this.findViewById(R.id.main_lin);  
  101.   
  102.     }  
  103.       
  104.     //设置滚动图片的小圆点  
  105.     private void setCircle() {  
  106.         for(int i = 0;i<li.size();i++){  
  107.             ImageView iv = new ImageView(MainActivity.this);  
  108.             //循环创建小圆点,判断第一个小圆点为白色的,其他的都是透明的  
  109.             if(i == 0){  
  110.                 iv.setBackgroundResource(R.drawable.circle_white);  
  111.             }else{  
  112.                 iv.setBackgroundResource(R.drawable.circle_transparent);  
  113.             }  
  114.             main_lin.addView(iv);  
  115.               
  116.             //设置小圆点的margin值  
  117.             LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1);   
  118.             lp.setMargins(510510);  
  119.             iv.setLayoutParams(lp);  
  120.         }  
  121.     }  
  122.       
  123.     @Override  
  124.     public void onDestroy() {  
  125.         //关闭activity时,关闭定时器  
  126.         if(handler != null){  
  127.             //判断定时器时候为null,!null就销毁  
  128.             if(timeadv != null){  
  129.                 handler.removeCallbacks(timeadv);  
  130.             }  
  131.         }  
  132.         super.onDestroy();  
  133.     }  
  134.   
  135. }  

adapter文件

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import android.content.Context;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.BaseAdapter;  
  9. import android.widget.ImageView;  
  10.   
  11. public class Gallery_adapter extends BaseAdapter {  
  12.       
  13.     Context context;  
  14.       
  15.     List<Object> list;  
  16.   
  17.     public Gallery_adapter(Context context) {  
  18.         this.context = context;  
  19.         list = new ArrayList<Object>();  
  20.     }  
  21.       
  22.     public void setList(List<Object> list) {  
  23.         this.list = list;  
  24.         this.notifyDataSetChanged();  
  25.   
  26.     }  
  27.   
  28.     @Override  
  29.     public int getCount() {  
  30.         // TODO Auto-generated method stub  
  31.         return list.size();  
  32.     }  
  33.   
  34.     @Override  
  35.     public Object getItem(int arg0) {  
  36.         // TODO Auto-generated method stub  
  37.         return list.get(arg0);  
  38.     }  
  39.   
  40.     @Override  
  41.     public long getItemId(int arg0) {  
  42.         // TODO Auto-generated method stub  
  43.         return arg0;  
  44.     }  
  45.   
  46.     @Override  
  47.     public View getView(int position, View convertView, ViewGroup parent) {  
  48.         ViewHolder viewHolder = null;  
  49.         if(convertView == null || convertView.getTag() == null){  
  50.             convertView = LayoutInflater.from(context).inflate(R.layout.gallery_item, parent,false);  
  51.               
  52.             viewHolder = new ViewHolder();  
  53.               
  54.             viewHolder.gallery_iv = (ImageView) convertView.findViewById(R.id.gallery_iv);  
  55.               
  56.             convertView.setTag(viewHolder);  
  57.               
  58.         }else{  
  59.             viewHolder = (ViewHolder) convertView.getTag();  
  60.         }  
  61.           
  62.           
  63.           
  64.         viewHolder.gallery_iv.setImageResource(Integer.parseInt(list.get(position).toString()));  
  65.         return convertView;  
  66.     }  
  67.       
  68.     class ViewHolder{  
  69.         ImageView gallery_iv;  
  70.     }  
  71.   
  72. }  


源码下载


0 0
原创粉丝点击