您的位置:首页 > 其它

ViewPager无限自动轮播

2016-04-18 19:49 316 查看
布局中的实现代码

<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>


运行的效果展示:可以实现无限自动轮播

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: