最近学习了viewPager的用法,但是发现当手动滑动viewPager时无法实现无限循环,网上百度了一下,大家都是用的通过设置count的长度为一个很大的值,比如Integer.MAX_VALUE,再用取余的方法去添加view,老师也是这样讲的,但这样并没有达到理论上的无限循环,而且如果我在页面添加一组RadioButton来跳转到对应页面的话也会报错,所以自己想了一下,用另一种方法来实现了真正的无限循环和添加RadioButton,大家看看代码给点意见,我这样是否有不妥
Java代码:
package com.example.android_viewpager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.R.integer;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private ViewPager viewPager;
private int[] ImageId;
private LinkedList list;
private ImageView imageView;
private TextView textView;
private Handler handler;
private boolean flag = true;
private MyAdapter myAdapter;
private Map textmap;
private Map rbmap;
private Map rbmap1;
private RadioGroup rg;
private RadioButton rb1, rb2, rb3, rb4, rb5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.vp);
textView = (TextView) findViewById(R.id.text);
rg = (RadioGroup) findViewById(R.id.rg);
rb1 = (RadioButton) findViewById(R.id.rb1);
rb2 = (RadioButton) findViewById(R.id.rb2);
rb3 = (RadioButton) findViewById(R.id.rb3);
rb4 = (RadioButton) findViewById(R.id.rb4);
rb5 = (RadioButton) findViewById(R.id.rb5);
ImageId = getImageId();
list = getImageView();
textmap = getText();
rbmap = getRadioButton();
rbmap1 = getRadioButton1();
rb3.setChecked(true);
textView.setText(textmap.get(list.get(2)));
myAdapter = new MyAdapter();
viewPager.setAdapter(myAdapter);
viewPager.setOnPageChangeListener(new MyOnClick());
viewPager.setCurrentItem(2);
rg.setOnCheckedChangeListener(new MyOnChangeLister());
// isHandler();
// handler.sendEmptyMessageDelayed(0, 2000);
}
class MyOnChangeLister implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int indexOf;
switch (checkedId) {
case R.id.rb1:
indexOf = list.indexOf(rbmap1.get(rb1));
viewPager.setCurrentItem(indexOf);
break;
case R.id.rb2:
indexOf = list.indexOf(rbmap1.get(rb2));
viewPager.setCurrentItem(indexOf);
break;
case R.id.rb3:
indexOf = list.indexOf(rbmap1.get(rb3));
viewPager.setCurrentItem(indexOf);
break;
case R.id.rb4:
indexOf = list.indexOf(rbmap1.get(rb4));
viewPager.setCurrentItem(indexOf);
break;
case R.id.rb5:
indexOf = list.indexOf(rbmap1.get(rb5));
viewPager.setCurrentItem(indexOf);
break;
default:
break;
}
}
}
private Map<RadioButton, ImageView> getRadioButton1() {
Map<RadioButton, ImageView> map = new HashMap<RadioButton, ImageView>();
map.put(rb1, list.get(0));
map.put(rb2, list.get(1));
map.put(rb3, list.get(2));
map.put(rb4, list.get(3));
map.put(rb5, list.get(4));
return map;
}
private Map<ImageView, RadioButton> getRadioButton() {
Map<ImageView, RadioButton> map = new HashMap<ImageView, RadioButton>();
map.put(list.get(0), rb1);
map.put(list.get(1), rb2);
map.put(list.get(2), rb3);
map.put(list.get(3), rb4);
map.put(list.get(4), rb5);
return map;
}
// private void isHandler() {
// handler = new Handler() {
//
// @Override
// public void handleMessage(Message msg) {
// viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
// if (flag) {
// sendEmptyMessageDelayed(0, 2000);
// }
//
// }
// };
//
// }
@Override
protected void onDestroy() {
flag = false;
super.onDestroy();
}
class MyOnClick implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
textView.setText(textmap.get(list.get(position)));
RadioButton radioButton = rbmap.get(list.get(position));
radioBtn();
radioButton.setBackgroundResource(R.drawable.b);
getImageView2(position);
}
}
class MyAdapter extends PagerAdapter {
public int getCount() {
return list.size();
}
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
viewPager.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
viewPager.removeView(list.get(position));
}
}
private Map<ImageView, String> getText() {
Map<ImageView, String> map = new HashMap<ImageView, String>();
map.put(list.get(0), "第一个界面");
map.put(list.get(1), "第二个界面");
map.put(list.get(2), "第三个界面");
map.put(list.get(3), "第四个界面");
map.put(list.get(4), "第五个界面");
return map;
}
private void getImageView2(int i) {
switch (i) {
case 0:
for(int j=0;i<2;i++){
ImageView imageView1 = list.getLast();
list.removeLast();
list.addFirst(imageView1);
}
viewPager.setAdapter(myAdapter=new MyAdapter());
viewPager.setCurrentItem(2);
break;
case 1:
ImageView imageView2 = list.getLast();
list.removeLast();
list.addFirst(imageView2);
viewPager.setAdapter(myAdapter=new MyAdapter());
viewPager.setCurrentItem(2);
break;
case 3:
ImageView imageView3 = list.getFirst();
list.removeFirst();
list.addLast(imageView3);
viewPager.setAdapter(myAdapter=new MyAdapter());
viewPager.setCurrentItem(2);
break;
case 4:
for(int j=0;j<2;j++){
ImageView imageView4 = list.getFirst();
list.removeFirst();
list.addLast(imageView4);
}
viewPager.setAdapter(myAdapter=new MyAdapter());
viewPager.setCurrentItem(2);
break;
default:
break;
}
}
private LinkedList<ImageView> getImageView() {
list = new LinkedList<ImageView>();
for (int i = 0; i < ImageId.length; i++) {
imageView = new ImageView(this);
imageView.setBackgroundResource(ImageId[i]);
list.add(imageView);
}
return list;
}
private int[] getImageId() {
return new int[] { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
R.drawable.pic4, R.drawable.pic5 };
}
private void radioBtn(){
rb1.setBackgroundResource(R.drawable.a);
rb2.setBackgroundResource(R.drawable.a);
rb3.setBackgroundResource(R.drawable.a);
rb4.setBackgroundResource(R.drawable.a);
rb5.setBackgroundResource(R.drawable.a);
}
}