美文网首页
自定义广告栏

自定义广告栏

作者: f44148db1e8c | 来源:发表于2019-05-18 16:51 被阅读0次

    均属于笔记,仅供个人参考,有问题欢迎指正

    主要用于熟悉一些概念

    1,广告信息实体类

    /**

    * 描述:广告信息</br>

    */

    public class ADInfo implements Serializable{

    private static final long serialVersionUID = 1L;

    //图片路径

    String PictureUrl;

    //链接路径

    String ActionUrl;

    //广告描述

    String AdName;

    public String getPictureUrl() {

    return PictureUrl;

    }

    public void setPictureUrl(String pictureUrl) {

    PictureUrl = pictureUrl;

    }

    public String getActionUrl() {

    return ActionUrl;

    }

    public void setActionUrl(String actionUrl) {

    ActionUrl = actionUrl;

    }

    public String getAdName() {

    return AdName;

    }

    public void setAdName(String adName) {

    AdName = adName;

    }

    }

    2,自定义广告栏布局

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/ad_rl"

        android:layout_width="match_parent"

        android:layout_height="match_parent" >

        <android.support.v4.view.ViewPager

            android:id="@+id/pager_banner"

            android:layout_width="match_parent"

            android:layout_height="match_parent" >

        </android.support.v4.view.ViewPager>

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_alignParentBottom="true"

            android:background="#33000000"

            android:orientation="vertical" >

            <TextView

                android:id="@+id/image_desc"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:gravity="center"

                android:text="@string/app_name"

                android:textColor="@android:color/white"

                android:textSize="18sp" />

            <LinearLayout

                android:id="@+id/point_group"

                android:layout_width="wrap_content"

                android:layout_gravity="center_horizontal"

                android:layout_height="wrap_content"

                android:orientation="horizontal">

            </LinearLayout>

        </LinearLayout>

    </RelativeLayout>

    3,自定义banner

    public class ImageCycleView extends LinearLayout {

    /**

    * 上下文

    */

    private Context mContext;

    /**

    * 数据

    */

    private List<ADInfo> infodatas = new ArrayList<>();

    /**

    * 图片轮播视图

    */

    private ViewPager pager_banner;

    /**

    * 滚动图片视图适配器

    */

    private ImageCycleAdapter mAdvAdapter;

    /**

    * 广告描述文本区

    */

    private TextView image_desc;

    /**

    * 图片轮播指示器控件

    */

    private LinearLayout point_group;

    /**

    * 滚动图片指示器-视图列表

    */

    private ArrayList<ImageView> mImageViews = new ArrayList<>();

    /**

    * 手机密度

    */

    private float mScale;

    /**

    * @param context

    */

    public ImageCycleView(Context context) {

    super(context);

    }

    /**

    * @param context

    * @param attrs

    */

    public ImageCycleView(Context context, AttributeSet attrs) {

    super(context, attrs);

    mContext = context;

    mScale = context.getResources().getDisplayMetrics().density;

    View view = LayoutInflater.from(context).inflate(R.layout.view_banner_content, this);

    pager_banner = (ViewPager) view.findViewById(R.id.pager_banner);

    pager_banner.setOnPageChangeListener(new GuidePageChangeListener());

    pager_banner.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View v, MotionEvent event) {

    switch (event.getAction()) {

    case MotionEvent.ACTION_UP:

    // 开始图片滚动

    startImageTimerTask();

    break;

    default:

    // 停止图片滚动

    stopImageTimerTask();

    break;

    }

    return false;

    }

    });

    // 滚动图片右下指示器视图

    point_group = (LinearLayout) view.findViewById(R.id.point_group);

    image_desc = (TextView) view.findViewById(R.id.image_desc);

    }

    /**

    * 装填图片数据

    *

    * @param infoList

    * @param imageCycleViewListener

    */

    public void setImageResources(List<ADInfo> infoList, ImageCycleViewListener imageCycleViewListener) {

    // 清除所有子视图

    point_group.removeAllViews();

    mImageViews.clear();

    //为了平滑滑动

    infodatas = infoList;

    for (int i = 0; i < infodatas.size(); i++) {

    ImageView mImageView = new ImageView(mContext);

    int imageParams = (int) (mScale * 20 + 0.5f);// XP与DP转换,适应不同分辨率

    int imagePadding = (int) (mScale * 5 + 0.5f);

    LayoutParams layout = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    layout.setMargins(3, 0, 3, 0);

    mImageView.setLayoutParams(layout);

    if (i == 0) {

    mImageView.setBackgroundResource(R.drawable.icon_point_pre);

    } else {

    mImageView.setBackgroundResource(R.drawable.icon_point);

    }

    mImageViews.add(mImageView);

    point_group.addView(mImageView);

    }

    image_desc.setText(infodatas.get(0).getAdName());

    mAdvAdapter = new ImageCycleAdapter(mContext, imageCycleViewListener);

    pager_banner.setAdapter(mAdvAdapter);

    //为了平滑滑动

    pager_banner.setCurrentItem(Integer.MAX_VALUE/2 - (Integer.MAX_VALUE/2 % infodatas.size())) ;

    startImageTimerTask();

    }

    /**

    * 开始轮播(手动控制自动轮播与否,便于资源控制)

    */

    public void startImageCycle() {

    startImageTimerTask();

    }

    /**

    * 暂停轮播——用于节省资源

    */

    public void pushImageCycle() {

    stopImageTimerTask();

    }

    /**

    * 开始图片滚动任务

    */

    private void startImageTimerTask() {

    stopImageTimerTask();

    // 图片每3秒滚动一次

    mHandler.postDelayed(mImageTimerTask, 3000);

    }

    /**

    * 停止图片滚动任务

    */

    private void stopImageTimerTask() {

    mHandler.removeCallbacks(mImageTimerTask);

    }

    private Handler mHandler = new Handler();

    /**

    * 图片自动轮播Task

    */

    private Runnable mImageTimerTask = new Runnable() {

    @Override

    public void run() {

    if (mImageViews != null) {

    // 下标等于图片列表长度说明已滚动到最后一张图片,重置下标

    if (pager_banner.getCurrentItem()+1 > Integer.MAX_VALUE) {

    pager_banner.setCurrentItem(0);

    }else{

    pager_banner.setCurrentItem(pager_banner.getCurrentItem()+1);

    }

    }

    }

    };

    /**

    * 轮播图片状态监听器

    *

    * @author minking

    */

    private final class GuidePageChangeListener implements OnPageChangeListener {

    @Override

    public void onPageScrollStateChanged(int state) {

    if (state == ViewPager.SCROLL_STATE_IDLE)

    startImageTimerTask(); // 开始下次计时

    }

    @Override

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

    }

    @Override

    public void onPageSelected(int index) {

    //为了平滑滑动

    index = index % infodatas.size();

    //设置文字描述内容

    image_desc.setText(infodatas.get(index).getAdName());

    for (int i = 0; i < mImageViews.size(); i++) {

    if (i == index) {

    mImageViews.get(i).setBackgroundResource(R.drawable.icon_point_pre);

    }else{

    mImageViews.get(i).setBackgroundResource(R.drawable.icon_point);

    }

    }

    }

    }

    private class ImageCycleAdapter extends PagerAdapter {

    /**

    * 图片视图缓存列表

    */

    private ArrayList<ImageView> mImageViewCacheList;

    /**

    * 广告图片点击监听器

    */

    private ImageCycleViewListener mImageCycleViewListener;

    private Context mContext;

    public ImageCycleAdapter(Context context, ImageCycleViewListener imageCycleViewListener) {

    mContext = context;

    mImageCycleViewListener = imageCycleViewListener;

    mImageViewCacheList = new ArrayList<ImageView>();

    }

    @Override

    public int getCount() {

    return Integer.MAX_VALUE;

    }

    @Override

    public boolean isViewFromObject(View view, Object obj) {

    return view == obj;

    }

    @Override

    public Object instantiateItem(ViewGroup container, int position) {

    final int realposition = position % infodatas.size();

    String imageUrl = infodatas.get(realposition).getPictureUrl();

    ImageView imageView = null;

    if (mImageViewCacheList.isEmpty()) {

    imageView = new ImageView(mContext);

    imageView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    imageView.setScaleType(ImageView.ScaleType.FIT_XY);

    } else {

    imageView = mImageViewCacheList.remove(0);

    }

    // 设置图片点击监听

    imageView.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

    mImageCycleViewListener.onImageClick(infodatas.get(realposition),realposition, v);

    }

    });

    imageView.setTag(imageUrl);

    container.addView(imageView);

    mImageCycleViewListener.displayImage(imageUrl, imageView);

    return imageView;

    }

    @Override

    public void destroyItem(ViewGroup container, int position, Object object) {

    ImageView view = (ImageView) object;

    container.removeView(view);

    mImageViewCacheList.add(view);

    }

    }

    /**

    * 轮播控件的监听事件

    *

    * @author minking

    */

    public static interface ImageCycleViewListener {

    /**

    * 加载图片资源

    *

    * @param imageURL

    * @param imageView

    */

    public void displayImage(String imageURL, ImageView imageView);

    /**

    * 单击图片事件

    *

    * @param postion

    * @param imageView

    */

    public void onImageClick(ADInfo info, int postion, View imageView);

    }

    }

    4,使用方式

    imagec.setImageResources(infos, mAdCycleViewListener);

    private ImageCycleView.ImageCycleViewListener mAdCycleViewListener = new ImageCycleView.ImageCycleViewListener() {

            @Override

            public void onImageClick(ADInfo info, int position, View imageView) {

                String Footname = info.getActionUrl();

                FootBean footBean = DBClient.getInstance(context).queryFootByFootName(Footname);

                Intent intent = new Intent(context,ShowFootActivity.class);

                intent.putExtra("footdata",footBean);

                startActivity(intent);

            }

            @Override

            public void displayImage(String imageURL, ImageView imageView) {

                imageView.setBackgroundResource(Integer.parseInt(imageURL));

            }

        };

    相关文章

      网友评论

          本文标题:自定义广告栏

          本文链接:https://www.haomeiwen.com/subject/wwvtzqtx.html