美文网首页
自定义广告栏

自定义广告栏

作者: 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