码迷,mamicode.com
首页 > 其他好文 > 详细

滚动广告——viewpager

时间:2014-05-13 05:41:24      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:android   viewpager   广告   

1.HomeAdView

package com.tengw.jinhuaqi.view;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.content.Context;
import android.os.Handler;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.tengw.jinhuaqi.R;
import com.tengw.jinhuaqi.entity.AdvertEntity;
import com.tengw.jinhuaqi.util.LayoutUtil;
import com.tengw.jinhuaqi.util.LogUtil;
import com.tengw.jinhuaqi.util.StringUtil;

/**
 * 首页广告
 * @author xcp001
 * 
 */
public class HomeAdView extends LinearLayout
{
    private Context context;
    private TextView title;//新闻标题
    private LinearLayout dotView;
    private ViewPager viewPager;
    private List<View> views = new ArrayList<View>();
    private List<View> dots = new ArrayList<View>();
    private int currentItem;
    private List<AdvertEntity> adList = new ArrayList<AdvertEntity>();

    private ScheduledExecutorService scheduledExecutorService;

    /**
     * 切换当前显示的图片
     */
    private Handler handler = new Handler()
    {
        public void handleMessage(android.os.Message msg)
        {
            // 切换当前显示的图片
            viewPager.setCurrentItem(currentItem);
        };
    };

    public HomeAdView(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        this.context = context;

        LayoutInflater.from(context).inflate(R.layout.advert_layout, this);

        dotView = (LinearLayout) findViewById(R.id.dot);

        title = (TextView) findViewById(R.id.tv_title);
        viewPager = (ViewPager) findViewById(R.id.vp);
        // 设置填充ViewPager页面的适配器
        viewPager.setAdapter(new MyAdapter());
        // 设置一个监听器,当ViewPager中的页面改变时调用
        viewPager.setOnPageChangeListener(new MyPageChangeListener());

    }

    /**
     * 更新页面
     */
    public void updateView(List<AdvertEntity> adList)
    {
        this.adList = adList;
        if (adList.size() == 0)
        {
            return;
        }

        views.clear();
        dots.clear();
        dotView.removeAllViews();

        int size = adList.size();
        AdvertEntity info = null;
        for (int i = 0; i < size; i++)
        {
            info = adList.get(i);

            ImageView imageView = new ImageView(context);
            //            String minImg=StringUtil.getMinUrl(info.getPhotoUrl());
            LayoutUtil.setBitmap(imageView, info.getImgUrl());

            //TODO 测试
            //            imageView.setImageResource(info.getImgId());

            imageView.setScaleType(ScaleType.FIT_XY);
            views.add(imageView);

            imageView = new ImageView(context);
            imageView.setImageResource(R.drawable.gsdt_icondian2);
            dots.add(imageView);

            if (views.size() == 1)
            {
                views.get(0).setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        LogUtil.i("=pos11=", "");
                        //                        callback.gotoAdDetail(0);
                    }
                });
            }

            title.setText(info.getDesc());
        }
        for (int i = 0; i < dots.size(); i++)
        {
            dotView.addView(dots.get(i));
        }
        viewPager.setAdapter(new MyAdapter());
        onStart();
    }

    private AdviewCallback callback;

    public interface AdviewCallback
    {
        void gotoAdDetail(int position);
    }

    public void setCallback(AdviewCallback callback)
    {
        this.callback = callback;
    }

    public void onStart()
    {
        LogUtil.i("=onStart=", "" + views.size());
        onStop();

        if (views.size() > 1)
        {
            scheduledExecutorService = Executors
                    .newSingleThreadScheduledExecutor();
            // 当Activity显示出来后,每两秒钟切换一次图片显示
            scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1,
                    3, TimeUnit.SECONDS);
        }
    }

    public void onStop()
    {
        // 当Activity不可见的时候停止切换
        if (scheduledExecutorService != null)
        {
            scheduledExecutorService.shutdown();
        }
    }

    /**
     * 换行切换任务
     * 
     * @author Administrator
     * 
     */
    private class ScrollTask implements Runnable
    {

        public void run()
        {
            synchronized (viewPager)
            {
                currentItem = (currentItem + 1) % views.size();
                handler.obtainMessage().sendToTarget(); // 通过Handler切换图片
            }
        }
    }

    /**
     * 当ViewPager中页面的状态发生改变时调用
     * @author Administrator
     */
    private class MyPageChangeListener implements OnPageChangeListener
    {
        /**
         * This method will be invoked when a new page becomes selected.
         * position: Position index of the new selected page.
         */
        public void onPageSelected(final int position)
        {
            currentItem = position;
            LogUtil.i("=dots=", dots.size() + "");
            for (int i = 0; i < dots.size(); i++)
            {
                dots.get(i).setBackgroundResource(R.drawable.gsdt_icondian2);
            }
            dots.get(position).setBackgroundResource(R.drawable.gsdt_icondian1);

            //TODO 切换标题
            if (null != adList.get(position)
                    && !StringUtil
                            .isStringEmpty(adList.get(position).getDesc()))
            {
                title.setText(adList.get(position).getDesc());
            }
            else
            {
                title.setText("");
            }
            views.get(position).setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    LogUtil.i("=pos=", "" + position);
                    //                    callback.gotoAdDetail(position);
                }
            });
        }

        public void onPageScrollStateChanged(int arg0)
        {
        }

        public void onPageScrolled(int arg0, float arg1, int arg2)
        {
        }
    }

    /**
     * @author xcp001
     *
     */
    private class MyAdapter extends PagerAdapter
    {
        @Override
        public int getCount()
        {
            return adList != null ? adList.size() : 0;
        }

        @Override
        public Object instantiateItem(View arg0, int arg1)
        {
            if (views.size() == 0)
            {
                return null;
            }

            ((ViewPager) arg0).addView(views.get(arg1));

            return views.get(arg1);
        }

        @Override
        public void destroyItem(View arg0, int arg1, Object arg2)
        {
            ((ViewPager) arg0).removeView((View) arg2);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1)
        {
            return arg0 == arg1;
        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1)
        {
        }

        @Override
        public Parcelable saveState()
        {
            return null;
        }

        @Override
        public void startUpdate(View arg0)
        {
        }

        @Override
        public void finishUpdate(View arg0)
        {
        }
    }

}

2.advert_layout  广告布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/frameView"
        android:layout_width="match_parent"
        android:layout_height="@dimen/ad_h" >

        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

        <!-- android:background="#33000000" -->

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="@dimen/ad_title_h"
            android:layout_gravity="bottom"
            android:background="#66000000"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:ellipsize="marquee"
                android:paddingLeft="@dimen/padding_15px"
                android:paddingRight="@dimen/padding_15px"
                android:singleLine="true"
                android:textColor="#ffffff"
                android:textSize="@dimen/text_size_16" />

            <LinearLayout
                android:id="@+id/dot"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:paddingRight="@dimen/padding_15px" >
            </LinearLayout>
        </RelativeLayout>
    </FrameLayout>

</RelativeLayout>


3.AdvertEntity 广告实体

package com.tengw.jinhuaqi.entity;

/**
 * 广告
 */
public class AdvertEntity
{
    private int id;
    private String imgUrl;
    private String desc;

    private String type;

    private String content;

    public String getContent()
    {
        return content;
    }

    public void setContent(String content)
    {
        this.content = content;
    }

    public String getType()
    {
        return type;
    }

    public void setType(String type)
    {
        this.type = type;
    }

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getImgUrl()
    {
        return imgUrl;
    }

    public void setImgUrl(String imgUrl)
    {
        this.imgUrl = imgUrl;
    }

    public String getDesc()
    {
        return desc;
    }

    public void setDesc(String desc)
    {
        this.desc = desc;
    }

}

4.


    /**广告*/
    private List<AdvertEntity> adList = new ArrayList<AdvertEntity>();

      AdvertEntity entity;
        for (int i = 0; i < 5; i++)
        {
            entity = new AdvertEntity();
            entity.setContent("广告" + i);
            entity.setDesc("广告描述" + i);
            entity.setImgUrl("/advert/patient/139883303682425453170.jpg");
            adList.add(entity);
        }



滚动广告——viewpager,布布扣,bubuko.com

滚动广告——viewpager

标签:android   viewpager   广告   

原文地址:http://blog.csdn.net/u012252502/article/details/25614667

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!