android实现倒计时,最简单实现RecyclerView倒计时+SwipeRefreshLayout下拉刷新
来源:互联网 发布:企业it解决方案 编辑:程序博客网 时间:2024/06/08 18:48
先上效果图:
RecyclerView + SwipeRefreshLayout
实现倒计时效果
MainActivity.java
package top.wintp.counttimedemo1;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import java.util.ArrayList;import java.util.List;/** * 类描述:主要的Activity * <p> * 作者: 你的感冒清 * <p> * qq: 337081267 * <p> * CSDN: http://blog.csdn.net/pyfysf * <p> * 个人博客: http://wintp.top * <p> * 时间: 17-5-18 * <p> * 邮箱: pyfysf@163.com */public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { private SwipeRefreshLayout mSwrl_refresh; private RecyclerView mRv_list; private List<CountTimeInfo> mCountTimeInfos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化View initView(); } /** * 初始化View */ private void initView() { mSwrl_refresh = (SwipeRefreshLayout) findViewById(R.id.swrl_refresh); mRv_list = (RecyclerView) findViewById(R.id.rv_list); //设置下拉刷新的监听 mSwrl_refresh.setOnRefreshListener(this); //获取数据 getData2Local(); } @Override public void onRefresh() { //刷新数据 new Handler().postDelayed(new Runnable() { @Override public void run() { mSwrl_refresh.setRefreshing(false); getData2Local(); } },2000); } /** * 从本地加载数据 * 可以从服务器端加载数据 */ public void getData2Local() { //创建本地集合装载数据 mCountTimeInfos = new ArrayList<>(); //添加数据 for (int i = 0; i < 100; i++) { CountTimeInfo countTimeInfo = new CountTimeInfo(); countTimeInfo.setContent("item内容" + i); countTimeInfo.setCreateTime(TimeUtils.getWebsiteDatetime() - ((i + 1) * 10)); countTimeInfo.setNeedTime((i+1)*10); mCountTimeInfos.add(countTimeInfo); } //设置布局管理器 LinearLayoutManager llm = new LinearLayoutManager(this); mRv_list.setLayoutManager(llm); //设置数据适配器 mRv_list.setAdapter(new CountTimeListAdapter(this, mCountTimeInfos)); }}
activity_main.xml布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swrl_refresh" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_list" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.widget.SwipeRefreshLayout></LinearLayout>
TimeUtil.java
package top.wintp.counttimedemo1;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimeZone;/** * 类描述: 时间的工具类 * * 作者: 你的感冒清 * * qq: 337081267 * * CSDN: http://blog.csdn.net/pyfysf * * 个人博客: http://wintp.top * * 时间: 17-5-18 * * 邮箱: pyfysf@163.com */public class TimeUtils { //时间格式转换 public static String timeChange(String time) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format.parse(time); } catch (ParseException e) { e.printStackTrace(); } SimpleDateFormat format1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); String str = format1.format(date); return str; } public static long timeDifference(String nowtime, String endtime) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long diff = 0; try { //系统时间转化为Date形式 Date dstart = format.parse(nowtime); //活动结束时间转化为Date形式 Date dend = format.parse(endtime); //算出时间差,用ms表示 diff = dend.getTime() - dstart.getTime(); } catch (ParseException e) { e.printStackTrace(); } //返回时间差 return diff; } /** * 获取网络时间 */ public static Long getWebsiteDatetime() { SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dff.setTimeZone(TimeZone.getTimeZone("GMT+08")); return stringToLongTime(dff.format(new Date())); } /** * 把String类型的事件转换为毫秒值 "yyyy-MM-dd HH:mm:ss" */ public static Long stringToLongTime(String time) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long millionSeconds = 0;//毫秒 try { return millionSeconds = sdf.parse(time).getTime(); } catch (ParseException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 把Long类型的毫秒值转换为 * * @param counttime day天 HH时mm分ss秒 * @return */ public static String longToStringTime(long counttime) { long days = counttime / (1000 * 60 * 60 * 24); long hours = (counttime - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); long minutes = (counttime - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60); long second = (counttime - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60) - minutes * (1000 * 60)) / 1000; return days + "天" + hours + "时" + minutes + "分" + second + "秒"; }}
item_count_time.xml
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="180dp" android:layout_margin="20dp" android:clickable="true" app:cardCornerRadius="10dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="180dp" android:padding="15dp"> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="4" android:gravity="center" android:text="内容条目" android:textColor="@android:color/holo_red_dark" android:textSize="20sp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/tv_count_down_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_weight="4" android:text="2017-05-18 09:26:53" android:textColor="@android:color/holo_red_dark" android:textSize="17sp" /> </RelativeLayout></android.support.v7.widget.CardView>
CountTimeAdapter.java
package top.wintp.counttimedemo1;import android.content.Context;import android.os.Handler;import android.os.Message;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;import java.util.Timer;import java.util.TimerTask;/** * 作者: 你的感冒清 * <p> * qq: 337081267 * <p> * CSDN: http://blog.csdn.net/pyfysf * <p> * 个人博客: http://wintp.top * <p> * 时间: 17-5-18 上午9:19 * <p> * 邮箱: pyfysf@163.com */class CountTimeListAdapter extends RecyclerView.Adapter { private final Context mContext; private LayoutInflater mLayoutInflater; private List<CountTimeInfo> mCountTimeInfos; public CountTimeListAdapter(Context context, List<CountTimeInfo> countTimeInfos) { mLayoutInflater = mLayoutInflater.from(context); this.mContext = context; this.mCountTimeInfos = countTimeInfos; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = mLayoutInflater.inflate(R.layout.item_count_time, parent, false); //下面两个不好看// View itemView = mLayoutInflater.inflate(R.layout.item_count_time, null);// View itemView = View.inflate(mContext,R.layout.item_count_time,null); return new CountTimeViewHolder(itemView); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { CountTimeViewHolder countTimeViewHolder = (CountTimeViewHolder) holder; countTimeViewHolder.bindView(this.mCountTimeInfos, position); } @Override public int getItemCount() { return mCountTimeInfos.size(); } private static class CountTimeViewHolder extends RecyclerView.ViewHolder { private final TextView mTv_content; private final TextView tv_count_down_time; private Timer mTimer; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 100: String currentStringTime = TimeUtils.longToStringTime((Long) msg.obj); tv_count_down_time.setText(currentStringTime); break; } } }; public CountTimeViewHolder(View itemView) { super(itemView); mTv_content = (TextView) itemView.findViewById(R.id.tv_content); tv_count_down_time = (TextView) itemView.findViewById(R.id.tv_count_down_time); } /** * 绑定View的内容 * * @param countTimeInfos * @param position */ public void bindView(List<CountTimeInfo> countTimeInfos, int position) { final CountTimeInfo countTimeInfo = countTimeInfos.get(position); mTv_content.setText(countTimeInfo.getContent()); mTimer = new Timer(); //刷新倒计时 TimerTask timerTask = new TimerTask() { @Override public void run() { Message msg = Message.obtain(); //结束时间减去当前时间 msg.what = 100; msg.obj = countTimeInfo.getStopTime() - TimeUtils.getWebsiteDatetime(); mHandler.sendMessage(msg); } }; //0秒之后每隔1秒执行一次run mTimer.schedule(timerTask, 1, 1000); } }}
CountTimeInfo.java
package top.wintp.counttimedemo1;/** * 描述:倒计时item的javabean * <p> * 作者: 你的感冒清 * <p> * qq: 337081267 * <p> * CSDN: http://blog.csdn.net/pyfysf * <p> * 个人博客: http://wintp.top * <p> * 时间: 17-5-18 上午9:12 * <p> * 邮箱: pyfysf@163.com */public class CountTimeInfo { private String content; private long stopTime; private long createTime; private long needTime; public void setNeedTime(long needTime) { this.needTime = needTime; } public long getStopTime() { return getCreateTime() + this.needTime * 60 * 1000; } public long getCreateTime() { return createTime; } public void setCreateTime(long createTime) { this.createTime = createTime; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public CountTimeInfo() { } @Override public String toString() { return "CountTimeInfo{" + "content='" + content + '\'' + '}'; }}
gradle(依赖)
compile 'com.android.support:design:25.3.1' compile 'com.android.support:cardview-v7:25.3.1'
阅读全文
1 0
- android实现倒计时,最简单实现RecyclerView倒计时+SwipeRefreshLayout下拉刷新
- SwipeRefreshLayout+RecyclerView实现下拉刷新
- Android实现RecyclerView自定义列表,SwipeRefreshLayout实现下拉刷新
- RecyclerView+SwipeRefreshLayout实现下拉刷新列表
- SwipeRefreshLayout和RecyclerView整合实现下拉刷新
- Android倒计时简单实现
- 简单Android倒计时实现
- Android实现简单倒计时
- android SwipeRefreshLayout下拉刷新实现
- Android SwipeRefreshLayout 实现下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- 算法提高 数字黑洞
- 使用DPM训练自己的模型
- Js高级函数式编程
- oracle时间函数(二),trunc()
- 最佳乘法问题
- android实现倒计时,最简单实现RecyclerView倒计时+SwipeRefreshLayout下拉刷新
- Spring异常默认映射HTTP状态码
- 约束优化方法之拉格朗日乘子法与KKT条件
- 如何替换RatingBar评分控件图片
- u3d物体跟随摄像头旋转角度
- JavaScript学习笔记-基本语法
- POJ 1220 NUMBER BASE CONVERSION 笔记
- 基于DragonBoard 410c的智能门铃系列三之系统功能分析
- py scikit-learn 库