在上一篇博客当中,我们讲了频道布局的实现,接下来我们讲解一下活动广告布局的实现,效果如下图:  

  

  这个是用viewpager去实现的,新建一个act_item.xml,代码如下所示:

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"> <android.support.v4.view.ViewPager
android:id="@+id/act_viewpager"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_gravity="center"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:clipChildren="false"/> </FrameLayout>

  在HomeFragmentAdapter类中继续完善活动的适配器,在onCreateViewHolder方法中创建ActViewHolder,接着在onBindViewHolder方法中绑定ActViewHolder数据,代码如下所示:

 package com.nyl.shoppingmall.home.adapter;

 import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast; import com.bumptech.glide.Glide;
import com.nyl.shoppingmall.R;
import com.nyl.shoppingmall.home.bean.ResultBeanData;
import com.nyl.shoppingmall.utils.Constants;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.youth.banner.listener.OnBannerClickListener;
import com.youth.banner.listener.OnLoadImageListener; import java.util.ArrayList;
import java.util.List; /**
* 首页适配器
*/ public class HomeFragmentAdapter extends RecyclerView.Adapter{ /**
* 广告幅类型
*/
public static final int BANNER = 0; /**
* 频道类型
*/
public static final int CHANNEL = 1; /**
* 活动类型
*/
public static final int ACT = 2; /**
* 秒杀类型
*/
public static final int SECKILL = 3; /**
* 推荐类型
*/
public static final int RECOMMEND = 4; /**
* 热卖类型
*/
public static final int HOT = 5; /**
* 初始化布局
*/
private LayoutInflater mLayoutInflater; /**
* 数据
*/
private ResultBeanData.ResultBean resultBean;
private Context mContext; /**
* 当前类型
*/
private int currenType = BANNER; public HomeFragmentAdapter(Context mContext, ResultBeanData.ResultBean resultBean) {
this.mContext = mContext;
this.resultBean = resultBean;
mLayoutInflater = LayoutInflater.from(mContext);
} /**
* 相当于getView创建ViewHolder部分代码
* @param parent
* @param viewType 当前的类型
* @return
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//广告福
if (viewType == BANNER){
//创建BannerViewHolder,Banner里面传布局文件
return new BannerViewHolder(mContext,mLayoutInflater.inflate(R.layout.banner_viewpager,null));
//频道
}else if (viewType == CHANNEL){
return new ChannelViewHolder(mContext,mLayoutInflater.inflate(R.layout.channel_item,null));
//活动
}else if (viewType == ACT){
return new ActViewHolder(mContext,mLayoutInflater.inflate(R.layout.act_item,null));
}
return null;
} /**
* 相当于getView中绑定数据模块
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//轮循广告
if (getItemViewType(position) == BANNER){
BannerViewHolder bannerViewHolder = (BannerViewHolder) holder;
bannerViewHolder.setData(resultBean.getBanner_info());
/**
* 频道
*/
}else if (getItemViewType(position) == CHANNEL){
ChannelViewHolder channelViewHolder = (ChannelViewHolder) holder;
channelViewHolder.setData(resultBean.getChannel_info());
/**
* 活动
*/
}else if (getItemViewType(position) == ACT){
ActViewHolder actViewHolder = (ActViewHolder) holder;
actViewHolder.setData(resultBean.getAct_info());
}
} /**
* 广告幅
*/
class BannerViewHolder extends RecyclerView.ViewHolder{ private Context mContext;
private Banner banner; public BannerViewHolder(Context mContext, View itemView) {
super(itemView);
this.mContext = mContext;
this.banner = (Banner) itemView.findViewById(R.id.banner);
} public void setData(List<ResultBeanData.ResultBean.BannerInfoEntity> banner_info) {
//得到图片集合地址
List<String> imagesUrl = new ArrayList<>();
for (int i = 0;i<banner_info.size();i++){
String imageUrl = banner_info.get(i).getImage();
imagesUrl.add(imageUrl);
}
//设置循环指示点
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
//设置手风琴效果
banner.setBannerAnimation(Transformer.Accordion);
//设置Banner图片数据
banner.setImages(imagesUrl, new OnLoadImageListener() {
@Override
public void OnLoadImage(ImageView view, Object url) {
//联网请求图片-Glide
Glide.with(mContext).load(Constants.BASE_URL_IMAGE + url).into(view);
}
});
//设置点击事件
banner.setOnBannerClickListener(new OnBannerClickListener() {
@Override
public void OnBannerClick(int position) {
Toast.makeText(mContext,"position=="+position,Toast.LENGTH_SHORT).show();
}
});
}
} /**
* 频道
*/
class ChannelViewHolder extends RecyclerView.ViewHolder{ private Context mContext;
private GridView gv_channel;
private ChannelAdapter adapter; public ChannelViewHolder(Context mContext, View itemView) {
super(itemView);
this.mContext = mContext;
gv_channel = (GridView) itemView.findViewById(R.id.gv_channel);
} public void setData(List<ResultBeanData.ResultBean.ChannelInfoBean> channel_info) {
//得到数据后,就设置GridView的适配器
adapter = new ChannelAdapter(mContext,channel_info);
gv_channel.setAdapter(adapter); //设置item的点击事件
gv_channel.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(mContext,"position"+position,Toast.LENGTH_SHORT).show();
}
});
}
} /**
* 活动
*/
class ActViewHolder extends RecyclerView.ViewHolder{ private Context mContext;
private ViewPager act_viewpager; public ActViewHolder(Context mContext,View itemView) {
super(itemView);
this.mContext = mContext;
act_viewpager = (ViewPager) itemView.findViewById(R.id.act_viewpager);
} public void setData(final List<ResultBeanData.ResultBean.ActInfoEntity> act_info) {
//设置间距
act_viewpager.setPageMargin(20);
//有数据后,就设置数据适配器
act_viewpager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return act_info.size();
} /**
*
* @param view 页面
* @param object instantiateItem方法返回的值
* @return
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} /**
*
* @param container ViewPager
* @param position 对应页面的位置
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, final int position) {
//实例化ImageView
ImageView imageView = new ImageView(mContext);
//设置ImageView的拉伸
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//根据Glide设置图片
Glide.with(mContext).load(Constants.BASE_URL_IMAGE+act_info.get(position).getIcon_url()).into(imageView);
//添加到容器中
container.addView(imageView); //设置点击事件
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"position=="+position,Toast.LENGTH_SHORT).show();
}
});
return imageView;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
});
}
} /**
* 得到不同的类型
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
switch (position){
case BANNER: //广告幅
currenType = BANNER;
break;
case CHANNEL: //频道
currenType = CHANNEL;
break;
case ACT: //活动
currenType = ACT;
break;
case SECKILL: //秒杀
currenType = SECKILL;
break;
case RECOMMEND: //推荐
currenType = RECOMMEND;
break;
case HOT: //热卖
currenType = HOT;
break;
}
return currenType;
} /**
* 总共有多少个item
* @return
*/
@Override
public int getItemCount() {
return 3;
} }

  我们还可以让ViewPager切换效果更加炫酷,这里介绍一个第三方库,下载地址:https://github.com/hongyangAndroid/MagicViewPager,接着去引入compile 'com.zhy:magic-viewpager:1.0.1',将切换动画进行美化,代码如下图:

  

  效果图就无法截图展现出来了,有兴趣的朋友,可以动手去操作。好了,关于活动广告布局的内容就介绍这么多。

Android商城开发系列(十)—— 首页活动广告布局实现的更多相关文章

  1. Android商城开发系列(四)——butterknife的使用

    在上一篇博客:Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏实现商城的底部导航栏时,里面用到了butterknife,今天来讲解一下的butterk ...

  2. Android商城开发系列(十三)—— 首页热卖商品布局实现

    热卖商品布局效果如下图: 这个布局跟我们上节做的推荐是一样的,也是用LinearLayout和GridView去实现的,新建一个hot_item.xml,代码如下所示: <?xml versio ...

  3. Android商城开发系列(一)——开篇

    最近在看尚硅谷的硅谷商城视频,想系统学习一下Android的商城开发流程,打算跟着视频的一步步做出一个商城,然后写博客总结记录一下整个商城的开发过程以及使用到的技术知识点,这个商城的最终效果如下图所示 ...

  4. Android商城开发系列(十二)—— 首页推荐布局实现

    首页新品推荐的布局效果如下图: 这块布局是使用LinearLayout和GridView去实现,新建recommend_item.xml,代码如下所示: <?xml version=" ...

  5. Android商城开发系列(七)—— 使用RecyclerView展示首页数据

    前面我们讲到了使用OkHttp请求网络和FastJson解析数据了,接下来我们就开始把获取到的数据通过数据适配器展示在页面上了.Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合 ...

  6. Android商城开发系列(九)—— 首页频道布局的实现

    在上一篇博客当中,我们讲了关于首页轮询广告的实现,接下来讲解一下首页频道布局的实现,如下图所示: 这个布局用的是gridview去完成的,新建一个channel_item,代码如下所示: <?x ...

  7. Android商城开发系列(五)—— 商城首页回到顶部和搜索框布局实现

    今天我们来开发商城的首页[输入搜索框]布局和点击右下角图片回到顶部的效果 搜索功能在App中很常见,尤其是在商城类的项目当中,一般都会提供很强大的搜索功能,App的搜索布局一般都是在App的顶部,如下 ...

  8. Android商城开发系列(十四)—— 设置监听RecyclerView的位置

    在前面的博客中有讲到过点击一个图片按钮控制RecyclerView的滚动到顶部位置的效果,但是那个图片按钮一直处在一个显示的状态,今天我们来改造一下那个地方,我们要实现的效果是:一开始打开的时候看不到 ...

  9. Android商城开发系列(十一)—— 首页秒杀布局实现

    首页秒杀布局如下图: 布局使用的是LinearLayout和RecyclerView去实现,新建seckkill_item.xml,代码如下所示: <?xml version="1.0 ...

随机推荐

  1. JAVA IO包的整理---------InputStream和OutputStream

    一:OutPutStream类: public abstract class OutputStream extends Object implements Closeable, Flushable 这 ...

  2. 一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

      前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常 ...

  3. NMF非负矩阵分解

    著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...

  4. C#交换两个数字

  5. 在Android中使用FlatBuffers(上篇)

    本文来自网易云社区. 总览 先来看一下 FlatBuffers 项目已经为我们提供了什么,而我们在将 FlatBuffers 用到我们的项目中时又需要做什么的整体流程.如下图: 在使用 FlatBuf ...

  6. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性介绍(2)- RT685EVKA性能实测(Dhrystone)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  7. 51nod1064(Bash博弈)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1067 题意:中文题诶~ 思路:直接规律就好了... 代码: ...

  8. 原来C#可以直接写二进制数的

    二进制数在C#中的写法: byte b=0b01111110 二进制字符串的解释: string bstr="0111110"; byte b=Convert.ToByte(bst ...

  9. 简单的vue.js的表单提交数据至flask然后数据库入库,再将表里面的数据展示在网页

    一.先在数据库中创建表格 在mysql中建users库并建立一个含有ID,username,email三个字段的user表 二.去vue的组件里面写页面的表单代码,注意form标签里的action需要 ...

  10. 查询缓存及索引:MySQL系列之九

    一.MySQL的架构 连接器 连接池,安全认证.线程池.连接限制.检查内存.缓存 SQL接口 DML.DDL SQL解析器,对SQL语句的权限检查.解析为二进制程序 优化器,优化访问路径 缓存cach ...