版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_GLY_di/article/details/53239889
第一步:在layout中添加ViewPager控件
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="1.2"
android:id="@+id/fragment_home_viewpager"
>
</android.support.v4.view.ViewPager>
第二步:在Activity或者Fragment中获取控件对象,设置资源以及适配器
// ViewPage,滚动图片资源
private ViewPager fragViewPager;
private int[] imags = { R.drawable.one, R.drawable.two,
R.drawable.three };
private List<View> views;
//找到控件
fragViewPager = (ViewPager) act
.findViewById(R.id.fragment_home_viewpager);
// viewPager设置适配器
views = new ArrayList<View>();
LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
for (int i = 0; i < imags.length; i++) {
ImageView iv = new ImageView(act);
iv.setLayoutParams(mParams);
iv.setImageResource(imags[i]);
iv.setScaleType(ScaleType.FIT_XY);
views.add(iv);
}
fragViewPager.setAdapter(new FragmentHomeViewPagerAdapter(views));
//抽出来的方法,用来让图片不停的滚动
picScrool();
滚动的方法,用AsyncTask实现图片切换
/**
* 2秒切换一次图片
*/
private void picScrool() {
AsyncTask<Void, Integer, Void> task = new AsyncTask<Void, Integer, Void>(){
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
fragViewPager.setCurrentItem(values[0]);
}
};
task.execute();
}
适配器代码
package com.gly.collagelostandfind.adapter;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
/**
* HomeFragment中的ViewPager的适配器,用来滚动图片
* @author 高留洋
* 为了实现图片不停的切换,我使用的是在这个适配器中把getCount中返回 Integer.MAX_VALUE,让position不停的往上加,然后把所有的position 更改为position % views.size(),这样用户看起来就是在轮询
*/
public class FragmentHomeViewPagerAdapter extends PagerAdapter {
private List<View> views;//数据源
public FragmentHomeViewPagerAdapter(List<View> views) {
super();
this.views = views;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView(views.get(position % views.size()));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//使用viewpager动态添加页面或者删除页面时出现了问题,会报这个错(Java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first),解决方法就是下面的代码
ViewPager parent = (ViewPager) views.get(position % views.size()).getParent();
if (parent != null) {
parent.removeAllViews();
}
((ViewPager)container).addView(views.get(position % views.size()), 0);
return views.get(position % views.size());
}
}