无限自动循环
package com.example.viewpager_loop;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ViewPager vp;
private List<ImageView> l;
private int imgArray[];
private MyAdapter adpter;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
l=new ArrayList<ImageView>();
imgArray=getImage();
for(int i=0;i<imgArray.length;i++){
ImageView img=new ImageView(this);
img.setImageResource(imgArray[i]);
l.add(img);
}
adpter=new MyAdapter(l);
vp.setAdapter(adpter);
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//获取当前页面的position
int position=vp.getCurrentItem();
vp.setCurrentItem(++position);
}
};
/**
* 每过两秒发送一次消息,ViewPager切换到一下个页面
*/
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
handler.sendEmptyMessage(1);
}
}
}).start();
}
private int [] getImage() {
int imgArray[] = { R.drawable.yan1, R.drawable.yan3, R.drawable.yan4,
R.drawable.yan5 };
return imgArray;
}
}
package com.example.viewpager_loop;
/**
* 循环切换原理:
* 】@Override
public int getCount() {
return 1000;
}
通过getCount决定ViewPager item项1000个(也可以更多),如果List中的数据有
5个,让第6个item去加载List中第一个数据。。。。。以此类推
1000个view并没有全部new 而是重用的原先加载好的 所以并不会占用大量内存
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
*/
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MyAdapter extends PagerAdapter{
private List<ImageView> l;
public MyAdapter(List<ImageView> l) {
this.l=l;
}
@Override
public int getCount() {
return 1000;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(l.get(position%l.size()));
return l.get(position%l.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(l.get(position%l.size()));
}
}
`附 ViewPage问题总结
问题1 用ViwePager做广告轮换的时候,图片显示过小,不充满ViewPager
解决方案一:可以在适配器中找到view设置scaleType
“`
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
ImageView img=list.get(position);
// img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
img.setScaleType(ScaleType.FIT_XY);
return list.get(position);
}“