ViewPager显示广告图片超简易使用方法

136 阅读1分钟

官方API:developer.android.com/reference/a…

首先自定义ViewPager

public class  MyViewPager extends ViewPager{

    public MyViewPager (Context context) {
        super(context);
    }
    public MyViewPager (Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //不限制宽,高设为子图片中最高的高
        int height = 0;
        for(int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if(h > height) height = h;
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

在XML文件中添加MyViewPager

<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"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <com.example.views.MyViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:flipInterval="1"
        android:persistentDrawingCache="animation" />

</RelativeLayout>

自定义适配器

public class MyPagerAdapter extends PagerAdapter {
    private Context context;
    private List<ImageView> picViews;
    public MyPagerAdapter(List<ImageView> picViews, Context context) {
        this.picViews = picViews;
        this.context = context;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public int getCount() {
        return picViews.size();
    }

    @Override
    public Object instantiateItem(View view, final int position) {
        ViewPager mViewPager = (ViewPager) view;
        mViewPager.addView(picViews.get(position));
        picViews.get(position).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //添加点击事件
            }
        });
        return picViews.get(position);
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        ViewPager viewPager = (ViewPager) container;
        viewPager.removeView(picViews.get(position));
    }
}

在你的java代码中做如下操作,需要使用ImageLoader

private MyPagerAdapter pagerAdapter = null;
private ViewPager viewpager = null;

private ArrayList<ImageView> picViews = new ArrayList<ImageView>();
private int control = -1;//控制广告的显示数量

    //计时更换广告
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case -1:
                viewpager.setCurrentItem((Integer) msg.obj);
                break;

            default:
                break;
            }
        }
    };

private void initViewPager(){
    pagerAdapter = new MyPagerAdapter(picViews, this);
    viewpager = (ViewPager)findViewById(R.id.viewpager);
    viewpager.setAdapter(pagerAdapter);
    viewpager.removeAllViews();
    for (int i=0; i<adsCount; i++) {//adsCount广告图片数量
            ImageView imageView = new ImageView(CebMainActivity.this);
            imageView.setScaleType(ScaleType.FIT_XY);
            ImageLoader.getInstance().displayImage( /**广告图片资源**/ , imageView); 
            picViews.add(imageView);
    }
    pagerAdapter.notifyDataSetChanged();
    runViewpagerTask();
}

    /**
     * 执行viewpager定时任务
     */
    private void runViewpagerTask() {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                control++;
                Message msg = new Message();
                msg.what = -1;
                if (control > 1) {//这里控制为两张
                    control = 0;
                }
                msg.obj = control;
                handler.sendMessage(msg);
            }
        };
        timer.schedule(task, 0, 6000);//每6秒执行一次
    }

开发者涨薪指南

48位大咖的思考法则、工作方式、逻辑体系