要实现这个功能很简单,首先,循环创建和图片一样数量的圆点,判断设置第一个圆点为白色其他的为透明的,
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;
}
}