Android 带圆点的自动轮播

本文介绍了一种实现图片轮播及对应指示器的方法,包括初始化视图、设置图片和指示器、添加监听器以实现图片切换时指示器同步更新,以及通过定时器自动播放图片等功能。


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

for(int i = 0;i<li.size();i++){
			ImageView iv = new ImageView(MainActivity.this);
			//循环创建小圆点,判断第一个小圆点为白色的,其他的都是透明的
			if(i == 0){
				iv.setBackgroundResource(R.drawable.circle_white);
			}else{
				iv.setBackgroundResource(R.drawable.circle_transparent);
			}
			main_lin.addView(iv);
			
			//设置小圆点的margin值
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1); 
			lp.setMargins(5, 10, 5, 10);
			iv.setLayoutParams(lp);
		}

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

//设置滚动图片的时候,对应小圆点的图片切换
		main_gallery.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				View v = main_lin.getChildAt(position);
				View cuview = main_lin.getChildAt(current_circle);
				
				if(v != null && cuview != null){
					ImageView pointView = (ImageView) v;
					ImageView curpointView = (ImageView) cuview;
					curpointView
							.setBackgroundResource(R.drawable.circle_transparent);
					pointView
							.setBackgroundResource(R.drawable.circle_white);
					current_circle = position;
				}
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				
			}
		});


设置定时器自动播放图片

//设置轮播定时器
		timeadv = new Runnable() {
			
			@Override
			public void run() {
				//获取当前的图片是哪一张图片,图片的序号,
				count = main_gallery.getSelectedItemPosition();
				//当前滚动的图片序号大于多有的图片的数量,就跳转到第一张图片,否则就跳转到下一张图片
				if(count+1>=li.size()){
					count = 0;
				}else{
					count = count+1;
				}
				main_gallery.setSelection(count);
				handler.postDelayed(this, 1000);
				
			}
		};

开启定时器

//开启定时器,1000毫秒切换一次图片
		handler.postDelayed(timeadv, 1000);

关闭activity时,关闭定时器

@Override
	public void onDestroy() {
		//关闭activity时,关闭定时器
		if(handler != null){
			//判断定时器时候为null,!null就销毁
			if(timeadv != null){
				handler.removeCallbacks(timeadv);
			}
		}
		super.onDestroy();
	}



所有的源码:
xml文件

<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"
    android:orientation="horizontal" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp" >

        <Gallery
            android:id="@+id/main_gallery"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:id="@+id/main_lin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>

item文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ImageView 
        android:id="@+id/gallery_iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        />

</LinearLayout>

activity文件

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.app.Activity;

public class MainActivity extends Activity {
	
	Gallery main_gallery;
	LinearLayout main_lin;
	
	List<Object> li;
	
	Integer[] res = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};
	
	Gallery_adapter gallery_adapter;
	
	int current_circle = 0;
	
	Runnable timeadv;
	int count;

	Handler handler = new Handler();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initview();
		li = new ArrayList<Object>();
		for(int i = 0;i<res.length;i++){
			li.add(res[i]);
		}
		
		gallery_adapter = new Gallery_adapter(this);
		
		main_gallery.setAdapter(gallery_adapter);
		gallery_adapter.setList(li);
		setCircle();
		
		//设置滚动图片的时候,对应小圆点的图片切换
		main_gallery.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				View v = main_lin.getChildAt(position);
				View cuview = main_lin.getChildAt(current_circle);
				
				if(v != null && cuview != null){
					ImageView pointView = (ImageView) v;
					ImageView curpointView = (ImageView) cuview;
					curpointView
							.setBackgroundResource(R.drawable.circle_transparent);
					pointView
							.setBackgroundResource(R.drawable.circle_white);
					current_circle = position;
				}
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				
			}
		});
		
		//设置轮播定时器
		timeadv = new Runnable() {
			
			@Override
			public void run() {
				//获取当前的图片是哪一张图片,图片的序号,
				count = main_gallery.getSelectedItemPosition();
				//当前滚动的图片序号大于多有的图片的数量,就跳转到第一张图片,否则就跳转到下一张图片
				if(count+1>=li.size()){
					count = 0;
				}else{
					count = count+1;
				}
				main_gallery.setSelection(count);
				handler.postDelayed(this, 1000);
				
			}
		};
		
		//开启定时器,1000毫秒切换一次图片
		handler.postDelayed(timeadv, 1000);
	}
	
	private void initview() {
		main_gallery = (Gallery) this.findViewById(R.id.main_gallery);
		main_lin = (LinearLayout) this.findViewById(R.id.main_lin);

	}
	
    //设置滚动图片的小圆点
	private void setCircle() {
		for(int i = 0;i<li.size();i++){
			ImageView iv = new ImageView(MainActivity.this);
			//循环创建小圆点,判断第一个小圆点为白色的,其他的都是透明的
			if(i == 0){
				iv.setBackgroundResource(R.drawable.circle_white);
			}else{
				iv.setBackgroundResource(R.drawable.circle_transparent);
			}
			main_lin.addView(iv);
			
			//设置小圆点的margin值
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1); 
			lp.setMargins(5, 10, 5, 10);
			iv.setLayoutParams(lp);
		}
	}
	
	@Override
	public void onDestroy() {
		//关闭activity时,关闭定时器
		if(handler != null){
			//判断定时器时候为null,!null就销毁
			if(timeadv != null){
				handler.removeCallbacks(timeadv);
			}
		}
		super.onDestroy();
	}

}

adapter文件

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class Gallery_adapter extends BaseAdapter {
	
	Context context;
	
	List<Object> list;

	public Gallery_adapter(Context context) {
		this.context = context;
		list = new ArrayList<Object>();
	}
	
	public void setList(List<Object> list) {
		this.list = list;
		this.notifyDataSetChanged();

	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = null;
		if(convertView == null || convertView.getTag() == null){
			convertView = LayoutInflater.from(context).inflate(R.layout.gallery_item, parent,false);
			
			viewHolder = new ViewHolder();
			
			viewHolder.gallery_iv = (ImageView) convertView.findViewById(R.id.gallery_iv);
			
			convertView.setTag(viewHolder);
			
		}else{
			viewHolder = (ViewHolder) convertView.getTag();
		}
		
		
		
		viewHolder.gallery_iv.setImageResource(Integer.parseInt(list.get(position).toString()));
		return convertView;
	}
	
	class ViewHolder{
		ImageView gallery_iv;
	}

}


源码下载


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值