布局中的实现代码
<RelativeLayout 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"
tools:context="com.example.radiobutto.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/ll_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="500dp"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>
//主类中的实现代码
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends Activity{
private ViewPager viewpager;
private LinearLayout line;
private int image[]=new int[]{R.drawable.aaa,R.drawable.bbb,R.drawable.ccc};
private List<View> list;
// 上一个指示点的下标
private int lastPointIndex=0;
//这个是实现自动轮播的功能 定义一个线程 发送一个请求
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
//获得当前页面的current号
int currentItem = viewpager.getCurrentItem();
viewpager.setCurrentItem(currentItem+=1);
handler.sendEmptyMessageDelayed(1, 2000);//需要有延迟 就是每三秒就换一张页面
};
};
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById();
//初始化数据
initData();
//为ViewPager添加适配器
setvpAdapter();
viewpager.setCurrentItem(Integer.MAX_VALUE/2);
handler.sendEmptyMessageDelayed(1, 2000);
setShapePoint();
}
private void setShapePoint() {
for (int i = 0; i <image.length; i++) {
// 创建指示点
RadioButton radio = new RadioButton(MainActivity.this);
// 设置指示点的背景
radio.setBackgroundResource(R.drawable.select);
// 得到布局设置参数的对象,该对象的类型取决于当前view的父view
LayoutParams layoutParams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// 设置指示点的间距,当前设置的是到左边控件的距离
layoutParams.leftMargin = 15;
// 给指示点设置参数
radio.setLayoutParams(layoutParams);
// 把imageView装进linearLayout布局中
line.addView(radio);
// 设置指示点的初始状态,当指示点是第一个的时候,设置成选中状态,其余的都是不选中
if (i == 0) {
radio.setEnabled(true);
} else {
radio.setEnabled(false);
}
}
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
int index = arg0 % image.length;
// 通过角标,得到linearLayout的子控件,设置当前指示点的选择状态
line.getChildAt(index).setEnabled(true);
// 设置上一个指示点的选择状态
line.getChildAt(lastPointIndex).setEnabled(false);
// 记录上一个角标位置
lastPointIndex = index;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
private void setvpAdapter() {
viewpager.setAdapter(new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;//无限轮播
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
if (list.get(position%image.length).getParent()!=null) {
container.removeView(list.get(position%image.length));
}
container.addView(list.get(position%image.length));
return list.get(position%image.length);
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
}
});
}
private void initData() {
list = new ArrayList<View>();
for (int i = 0; i < image.length; i++) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(image[i]);
list.add(imageView);
}
}
private void findViewById() {
// 获得控件的id
viewpager = (ViewPager) findViewById(R.id.viewpager);
line = (LinearLayout) findViewById(R.id.ll_layout);
}
}
我们需要在res目录下创建一个名为drawable的文件夹
select.xml中的实现代码这个是选择图片的
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:drawable="@drawable/true_123"></item>
<item android:state_enabled="false" android:drawable="@drawable/false_"></item>
</selector>
true_123.xml中的实现代码 选中状态下RadioButton的宽高和颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="10dp" android:height="10dp"/>
<solid android:color="#000000"/>
</shape>
false_.xml中的实现代码 选中状态下RadioButton的宽高和颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="10dp" android:height="10dp"/>
<solid android:color="#808080"/>
</shape>
运行的效果展示:可以实现无限自动轮播