Android商城开发系列(十一)—— 首页秒杀布局实现
首页秒杀布局如下图:
布局使用的是LinearLayout和RecyclerView去实现,新建seckkill_item.xml,代码如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" 5 android:layout_width="380dp" 6 android:layout_height="180dp" 7 android:background="#fff" 8 android:padding="10dp"> 9 10 <LinearLayout 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content"> 13 14 <ImageView 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:src="@mipmap/home_arrow_left_flash"/> 18 19 <TextView 20 android:layout_width="wrap_content" 21 android:layout_height="wrap_content" 22 android:layout_marginLeft="10dp" 23 android:text="今日闪购 距·结束" 24 android:textColor="#000"/> 25 26 <TextView 27 android:id="@+id/tv_time_seckill" 28 android:layout_width="wrap_content" 29 android:layout_height="wrap_content" 30 android:layout_marginLeft="10dp" 31 android:background="@drawable/time_shape" 32 android:padding="2dp" 33 android:text="00:00:00" 34 android:textColor="#fff"/> 35 36 <TextView 37 android:id="@+id/tv_more_seckill" 38 android:layout_width="wrap_content" 39 android:layout_height="wrap_content" 40 android:background="@mipmap/home_arrow_right" 41 android:gravity="end" 42 android:text="查看更多"/> 43 44 </LinearLayout> 45 46 <android.support.v7.widget.RecyclerView 47 android:id="@+id/rv_seckill" 48 android:layout_width="380dp" 49 android:layout_height="match_parent"/> 50 51 </LinearLayout>
在drawable目录下设置倒计时的TextView颜色,新建time_shape,代码如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="rectangle"> 4 <solid android:color="#ff4040" /> 5 <corners android:radius="5dp" /> 6 </shape>
布局弄好了,我们要把数据展示在界面上,在HomeFragmentAdapter类的onCreateViewHolder()方法中去创建秒杀ViewHolder(SeckillViewHolder),在SeckillViewHolder中使用Handler去实现了秒杀倒计时的效果,SeckillViewHolder代码如下所示:
1 /** 2 * 秒杀 3 */ 4 class SeckillViewHolder extends RecyclerView.ViewHolder{ 5 6 private Context mContext; 7 private TextView tv_time_seckill; 8 private TextView tv_more_seckill; 9 private RecyclerView rv_seckill; 10 private SeckillRecycleViewAdapter adapter; 11 12 /** 13 * 相差多少时间-毫秒 14 */ 15 private long dt = 0; 16 //使用Handler实现秒杀倒计时效果 17 private Handler handler = new Handler(){ 18 @Override 19 public void handleMessage(Message msg) { 20 super.handleMessage(msg); 21 dt = dt - 1000; 22 //时间格式化 23 SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss"); 24 //获取当前系统时间 25 String time = dateFormat.format(new Date(dt)); 26 tv_time_seckill.setText(time); 27 28 handler.removeMessages(0); 29 //发送消息,不断减时间 30 handler.sendEmptyMessageDelayed(0,1000); 31 if (dt <= 0){ 32 //把消息移除 33 handler.removeCallbacksAndMessages(null); 34 } 35 } 36 }; 37 38 public SeckillViewHolder(Context mContext, View itemView) { 39 super(itemView); 40 this.mContext = mContext; 41 //初始化布局控件 42 tv_time_seckill = (TextView) itemView.findViewById(R.id.tv_time_seckill); 43 tv_more_seckill = (TextView) itemView.findViewById(R.id.tv_more_seckill); 44 rv_seckill = (RecyclerView) itemView.findViewById(R.id.rv_seckill); 45 } 46 47 public void setData(ResultBeanData.ResultBean.SeckillInfoEntity seckill_info) { 48 //得到数据后,就是设置数据(TextView和RecyclerView)的数据 49 adapter = new SeckillRecycleViewAdapter(mContext,seckill_info.getList()); 50 rv_seckill.setAdapter(adapter); 51 52 //设置布局管理器 53 rv_seckill.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false)); 54 //设置item的点击事件 55 adapter.setOnSeckillRecyclerView(new SeckillRecycleViewAdapter.OnSeckillRecyclerView() { 56 @Override 57 public void onItemClick(int position) { 58 Toast.makeText(mContext,"秒杀"+position,Toast.LENGTH_SHORT).show(); 59 startGoodsInfoActivity(); 60 } 61 }); 62 //秒杀倒计时-毫秒 63 dt = Integer.valueOf(seckill_info.getEnd_time()) - Integer.valueOf(seckill_info.getStart_time()); 64 //进入后1秒钟就去发送这个消息 65 handler.sendEmptyMessageDelayed(0,1000); 66 67 } 68 }
得到数据了,就是设置数据(TextView和RecyclerView)的数据,首先新建一个item_seckill.xml,代码如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:id="@+id/ll_root" 5 android:orientation="vertical" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:padding="5dp"> 9 10 <ImageView 11 android:id="@+id/iv_figure" 12 android:layout_width="100dp" 13 android:layout_height="100dp" 14 android:background="@mipmap/new_img_loading_2"/> 15 16 <TextView 17 android:id="@+id/tv_cover_price" 18 android:layout_width="100dp" 19 android:layout_height="wrap_content" 20 android:layout_marginTop="5dp" 21 android:gravity="center_horizontal" 22 android:text="¥166.66" 23 android:textColor="#ff4c4c" 24 android:textSize="15dp"/> 25 26 <RelativeLayout 27 android:layout_width="100dp" 28 android:layout_height="wrap_content" 29 android:layout_marginTop="2dp"> 30 31 <TextView 32 android:id="@+id/tv_origin_price" 33 android:layout_width="100dp" 34 android:layout_height="wrap_content" 35 android:gravity="center_horizontal" 36 android:text="¥288.88" 37 android:textColor="#9a9a9a"/> 38 39 <View 40 android:layout_width="70dp" 41 android:layout_height="1dp" 42 android:layout_centerInParent="true" 43 android:background="#ffbababa"/> 44 </RelativeLayout> 45 </LinearLayout>
新建一个SeckillRecycleViewAdapter类,代码如下所示:
1 package com.nyl.shoppingmall.home.adapter; 2 3 import android.content.Context; 4 import android.support.v7.widget.RecyclerView; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.ImageView; 8 import android.widget.TextView; 9 10 import com.bumptech.glide.Glide; 11 import com.nyl.shoppingmall.R; 12 import com.nyl.shoppingmall.home.bean.ResultBeanData; 13 import com.nyl.shoppingmall.utils.Constants; 14 15 import java.util.List; 16 17 /** 18 * 秒杀RecycleView的适配器 19 */ 20 21 public class SeckillRecycleViewAdapter extends RecyclerView.Adapter<SeckillRecycleViewAdapter.ViewHolder>{ 22 23 private final Context mContext; 24 private final List<ResultBeanData.ResultBean.SeckillInfoEntity.ListBean> list; 25 26 public SeckillRecycleViewAdapter(Context mContext, List<ResultBeanData.ResultBean.SeckillInfoEntity.ListBean> list) { 27 this.mContext = mContext; 28 this.list = list; 29 } 30 31 /** 32 * 创建ViewHolder 33 * @param parent 34 * @param viewType 35 * @return 36 */ 37 @Override 38 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 39 View itemView = View.inflate(mContext, R.layout.item_seckill,null); 40 return new ViewHolder(itemView); 41 } 42 43 /** 44 * 绑定数据 45 * @param holder 46 * @param position 47 */ 48 @Override 49 public void onBindViewHolder(ViewHolder holder, int position) { 50 //根据位置得到对应的数据 51 ResultBeanData.ResultBean.SeckillInfoEntity.ListBean listBean = list.get(position); 52 //绑定数据 53 //使用Glide获取到图片数据 54 Glide.with(mContext).load(Constants.BASE_URL_IMAGE+listBean.getFigure()).into(holder.iv_figure); 55 //获取价钱的数据 56 holder.tv_cover_price.setText(listBean.getCover_price()); 57 //获取降价的数据 58 holder.tv_origin_price.setText(listBean.getOrigin_price()); 59 } 60 61 @Override 62 public int getItemCount() { 63 return list.size(); 64 } 65 66 class ViewHolder extends RecyclerView.ViewHolder{ 67 68 private ImageView iv_figure; 69 private TextView tv_cover_price; 70 private TextView tv_origin_price; 71 72 public ViewHolder(View itemView) { 73 super(itemView); 74 iv_figure = (ImageView) itemView.findViewById(R.id.iv_figure); 75 tv_cover_price = (TextView) itemView.findViewById(R.id.tv_cover_price); 76 tv_origin_price = (TextView) itemView.findViewById(R.id.tv_origin_price); 77 78 itemView.setOnClickListener(new View.OnClickListener() { 79 @Override 80 public void onClick(View view) { 81 // Toast.makeText(mContext,"秒杀=="+getLayoutPosition(),Toast.LENGTH_SHORT).show(); 82 if (onSeckillRecyclerView != null){ 83 onSeckillRecyclerView.onItemClick(getLayoutPosition()); 84 } 85 } 86 }); 87 } 88 } 89 /** 90 * 监听器 91 */ 92 public interface OnSeckillRecyclerView{ 93 //当某条被点击的时候回调 94 public void onItemClick(int position); 95 } 96 97 private OnSeckillRecyclerView onSeckillRecyclerView; 98 99 /** 100 * 设置item的监听器 101 * @param onSeckillRecyclerView 102 */ 103 public void setOnSeckillRecyclerView(OnSeckillRecyclerView onSeckillRecyclerView){ 104 this.onSeckillRecyclerView = onSeckillRecyclerView; 105 } 106 }
关于秒杀布局实现就讲到!
转载于:https://www.cnblogs.com/nylcy/p/6602930.html
Android商城开发系列(十一)—— 首页秒杀布局实现相关推荐
- Android商城开发系列
Android商城开发系列(一)--开篇 Android商城开发系列(二)--App启动欢迎页面制作 Android商城开发系列(三)--使用Fragment+RadioButton实现商城底部导航栏 ...
- Android商城开发系列(九)—— 首页频道布局的实现
在上一篇博客当中,我们讲了关于首页轮询广告的实现,接下来讲解一下首页频道布局的实现,如下图所示: 这个布局用的是gridview去完成的,新建一个channel_item,代码如下所示: 1 < ...
- Android商城开发系列(一)——开篇
最近在看尚硅谷的硅谷商城视频,想系统学习一下Android的商城开发流程,打算跟着视频的一步步做出一个商城,然后写博客总结记录一下整个商城的开发过程以及使用到的技术知识点,这个商城的最终效果如下图所示 ...
- Android商城开发系列(十)—— 首页活动广告布局实现
在上一篇博客当中,我们讲了频道布局的实现,接下来我们讲解一下活动广告布局的实现,效果如下图: 这个是用viewpager去实现的,新建一个act_item.xml,代码如下所示: 1 <?xml ...
- Android商城开发系列(二)——App启动欢迎页面制作
商城APP一般都会在应用启动时有一个欢迎界面,下面我们来实现一个最简单的欢迎页开发:就是打开商城App,先出现欢迎界面,停留几秒钟,自动进入应用程序的主界面. 首先先定义WelcomeActivity ...
- Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...
OkHttp是Google推荐使用的一个开源的网络请求框架,Android开发中涉及到网络请求和接口调用现在大部分都是使用OkHttp,网上已经有不少人针对OkHttp进行了封装,这里推荐一下鸿洋大神 ...
- Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)
Android商城开发----在商城首页Fragment使用viewPager实现广告轮播 写在前面:本篇文章建立在创建底部导航栏之后,对商城首页进行开发.创建底部导航栏的内容请查看:Android开 ...
- Android商城开发----点击左侧分类列表右侧更新对应列表内容
Android商城开发----点击左侧分类列表右侧更新对应列表内容 目录 Android商城开发----点击左侧分类列表右侧更新对应列表内容 一.首先说布局: 二.主要说一下,布局完成后实现点击左侧类 ...
- Android商城开发----点击加入购物车,购物车商品的增删减
Android商城开发----点击加入购物车,购物车商品的增删减 上一章节:[分类页面]点击左侧类别,实现右侧对应类别商品的展示 本文是在上一章节基础上开发的,点击[分类]页面商品的加入购物车按钮,实 ...
- Android自定义控件开发系列(零)——基础原理篇
在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...
最新文章
- sealos包管理使用
- 两个相邻盒子的边框怎么只显示一个_一篇文章带你快速理解盒子模型「经典案例」...
- EOJ Monthly 2019.11 E. 数学题(反演 + 杜教筛 + 拉格朗日插值)
- RHEL5+Postfix+MySql+IMAP+MailDrop+ExtMail(5)
- Java文件类String [] list(FilenameFilter fnf)方法,带示例
- (软件工程复习核心重点)第十二章软件项目管理-第四节:软件配置管理和能力成熟度模型
- leetcode 429 层序遍历n叉树(C语言)
- Android实例-手机安全卫士(三十五)-来电号码显示归属地
- 用命令行批处理bat,设置代理服务器、DNS、网关、WINS等
- jar包上传maven私服出错Cannot deploy artifact from the local repository
- 驱动精灵恶意投放后门程序 云控劫持流量、诱导推广
- etcd 及 etcd 在 k8s中的用法
- 第一次使用MFC开发桌面小程序
- 传真SIP会话发起协议(SIP)
- Postgresql - 监控 moniter — pgbadger
- 1484: 青蛙(四)
- OpenCV模板匹配和轮廓处理
- Java虚拟机不能满足_深入理解Java虚拟机--读书笔记1/3
- Django创建加法计算器
- 详解——导向滤波(Guided Filter)和快速导向滤波
热门文章
- 使用readLine()方法遇到的坑
- css3 水纹效果(仿写阿里云)
- Java程序发生异常就挂了吗?
- Pro Git读书笔记 - 分支
- 什么是垃圾回收(转)
- Quart2D文字图像绘制
- CentOS 6.2 mini安装桌面环境
- t620服务器安装系统,请教高手Dell T620 服务器安装Ubuntu14.04LTS桌面版 非常慢 为什么?...
- linux修改对外访问ip_linux 同一个ip 绑定两个不同的域名 访问两个不同的项目
- java实现beamsearch_Beam Search、Tensorflow下如何构建Beam Search