Android中使用ViewPager制作广告栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 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());
    }
}

猜你喜欢

转载自blog.csdn.net/Mr_GLY_di/article/details/53239889