Android实现淘宝客户端倒计时界面

在前面的文章中,我们分析了淘宝android客户端的一些界面实现和用户体验,今天这篇文章,主要介绍如何使用自定义控件,实现抢购倒计时的功能。

首先,我们看一下实现的效果。

实现效果很简单哈,就是一个倒计时的自定义控件。

下面简单介绍一下实现的思路。

首先,显示时间使用的是Textview,因为没有很特殊的效果,因此,我们可以自己写一个简单的布局文件,来作为显示的界面。

而关于时间的变更,我们使用timer类就可以实现,用一个1000毫秒的Timer,每过一秒,更新一下界面即可。

但是在更新时间的显示数字的时候,有一个问题需要注意,我的思路是用6个Textview来显示时间,因此,时分秒的十位数字和个位数字需要单独显示,个位上显示的数字是0-9,十位上显示的数字范围是0-5,所以需要分开实现。

当秒的十位个位都是0的时候,在过一秒,分的个位就要减一,这就涉及到借位的问题,因此,每变更一次数字,都需要判断是否需要借位。

具体的实现思路,大家还是看代码吧。

/*
 * Copyright (c) 2014, 青岛司通科技有限公司 All rights reserved.
 * File Name:RushBuyCountDownTimerView.java
 * Version:V1.0
 * Author:zhaokaiqiang
 * Date:2014-9-26
 */
package com.qust.widght; 

import java.util.Timer;
import java.util.TimerTask; 

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; 

import com.qust.rushbuycountdowntimerview.R; 

@SuppressLint("HandlerLeak")
public class RushBuyCountDownTimerView extends LinearLayout { 

  // 小时,十位
  private TextView tv_hour_decade;
  // 小时,个位
  private TextView tv_hour_unit;
  // 分钟,十位
  private TextView tv_min_decade;
  // 分钟,个位
  private TextView tv_min_unit;
  // 秒,十位
  private TextView tv_sec_decade;
  // 秒,个位
  private TextView tv_sec_unit; 

  private Context context; 

  private int hour_decade;
  private int hour_unit;
  private int min_decade;
  private int min_unit;
  private int sec_decade;
  private int sec_unit;
  // 计时器
  private Timer timer; 

  private Handler handler = new Handler() { 

    public void handleMessage(Message msg) {
      countDown();
    };
  }; 

  public RushBuyCountDownTimerView(Context context, AttributeSet attrs) {
    super(context, attrs); 

    this.context = context;
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.view_countdowntimer, this); 

    tv_hour_decade = (TextView) view.findViewById(R.id.tv_hour_decade);
    tv_hour_unit = (TextView) view.findViewById(R.id.tv_hour_unit);
    tv_min_decade = (TextView) view.findViewById(R.id.tv_min_decade);
    tv_min_unit = (TextView) view.findViewById(R.id.tv_min_unit);
    tv_sec_decade = (TextView) view.findViewById(R.id.tv_sec_decade);
    tv_sec_unit = (TextView) view.findViewById(R.id.tv_sec_unit); 

  } 

  /**
   *
   * @Description: 开始计时
   * @param
   * @return void
   * @throws
   */
  public void start() { 

    if (timer == null) {
      timer = new Timer();
      timer.schedule(new TimerTask() { 

        @Override
        public void run() {
          handler.sendEmptyMessage(0);
        }
      }, 0, 1000);
    }
  } 

  /**
   *
   * @Description: 停止计时
   * @param
   * @return void
   * @throws
   */
  public void stop() {
    if (timer != null) {
      timer.cancel();
      timer = null;
    }
  } 

  /**
   * @throws Exception
   *
   * @Description: 设置倒计时的时长
   * @param
   * @return void
   * @throws
   */
  public void setTime(int hour, int min, int sec) { 

    if (hour >= 60 || min >= 60 || sec >= 60 || hour < 0 || min < 0
        || sec < 0) {
      throw new RuntimeException("Time format is error,please check out your code");
    } 

    hour_decade = hour / 10;
    hour_unit = hour - hour_decade * 10; 

    min_decade = min / 10;
    min_unit = min - min_decade * 10; 

    sec_decade = sec / 10;
    sec_unit = sec - sec_decade * 10; 

    tv_hour_decade.setText(hour_decade + "");
    tv_hour_unit.setText(hour_unit + "");
    tv_min_decade.setText(min_decade + "");
    tv_min_unit.setText(min_unit + "");
    tv_sec_decade.setText(sec_decade + "");
    tv_sec_unit.setText(sec_unit + ""); 

  } 

  /**
   *
   * @Description: 倒计时
   * @param
   * @return boolean
   * @throws
   */
  private void countDown() { 

    if (isCarry4Unit(tv_sec_unit)) {
      if (isCarry4Decade(tv_sec_decade)) { 

        if (isCarry4Unit(tv_min_unit)) {
          if (isCarry4Decade(tv_min_decade)) { 

            if (isCarry4Unit(tv_hour_unit)) {
              if (isCarry4Decade(tv_hour_decade)) {
                Toast.makeText(context, "时间到了",
                    Toast.LENGTH_SHORT).show();
                stop();
              }
            }
          }
        }
      }
    }
  } 

  /**
   *
   * @Description: 变化十位,并判断是否需要进位
   * @param
   * @return boolean
   * @throws
   */
  private boolean isCarry4Decade(TextView tv) { 

    int time = Integer.valueOf(tv.getText().toString());
    time = time - 1;
    if (time < 0) {
      time = 5;
      tv.setText(time + "");
      return true;
    } else {
      tv.setText(time + "");
      return false;
    } 

  } 

  /**
   *
   * @Description: 变化个位,并判断是否需要进位
   * @param
   * @return boolean
   * @throws
   */
  private boolean isCarry4Unit(TextView tv) { 

    int time = Integer.valueOf(tv.getText().toString());
    time = time - 1;
    if (time < 0) {
      time = 9;
      tv.setText(time + "");
      return true;
    } else {
      tv.setText(time + "");
      return false;
    } 

  }
}

项目在我的github上,大家可以下载,也可以提交BUG。

项目地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android定时器和倒计时实现淘宝秒杀功能
  • Android中使用TextView实现高仿京东淘宝各种倒计时效果
  • android自定义倒计时控件示例
  • android实现倒计时功能代码
  • Android实现计时与倒计时的常用方法小结
  • Android实现加载广告图片和倒计时的开屏布局
  • Android 实现闪屏页和右上角的倒计时跳转实例代码
  • Android账号注册实现点击获取验证码倒计时效果
  • Android自定义圆形倒计时进度条
(0)

相关推荐

  • android实现倒计时功能代码

    效果图,每隔1秒,变换一下时间  xml: 复制代码 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="mat

  • Android实现加载广告图片和倒计时的开屏布局

    这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局.程序中设置的LayoutParams,划分额外空间比例为6分之5,具体权重比例可根据用户自己需求来自定义,异步加载广告图片,相关的Android代码. 具体实现代码如下: package cn.waps.extend; import android.app.Activity; import android.content.Context; import android.content.res.Configuration;

  • Android账号注册实现点击获取验证码倒计时效果

    网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果,如何实现这个效果,具体内容如下 效果图:   代码: RegisterActivity.java import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.jialianjia.bzw.BaseAct

  • Android中使用TextView实现高仿京东淘宝各种倒计时效果

    今天给大家带来的是仅仅使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后续的复习.为什么会想到使用一个TextView来实现呢?因为最近公司在做一些优化的工作,其中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的,实现的代码冗余比较大,故此项目经理就说:小宏这个就交给你来优化了,并且还要保证有一定的扩展性,当时就懵逼了.不知道从何处开始

  • Android定时器和倒计时实现淘宝秒杀功能

    本文实例为大家分享了Android实现淘宝秒杀的具体代码,供大家参考,具体内容如下 目录结构 效果图: imageViewHolder public class imageViewHolder extends RecyclerView.ViewHolder { public ImageView imageView; public imageViewHolder(View itemView) { super(itemView); imageView = (ImageView) itemView;

  • Android 实现闪屏页和右上角的倒计时跳转实例代码

    以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 全屏主题的意思. 给大家展示下效果图: 代码如下所示: package

  • Android自定义圆形倒计时进度条

    效果预览 源代码传送门:https://github.com/yanzhenjie/CircleTextProgressbar 实现与原理 这个文字圆形的进度条我们在很多APP中看到过,比如APP欢迎页倒计时,下载文件倒计时等. 分析下原理,可能有的同学一看到这个自定义View就慌了,这个是不是要继承View啊,是不是要绘制啊之类的,答案是:是的.但是我们也不要担心,实现这个效果实在是so easy.下面就跟我一起来看看核心分析和代码吧. 原理分析 首先我们观察上图,需要几个部分组成: 1. 外

  • Android实现计时与倒计时的常用方法小结

    本文实例总结了Android实现计时与倒计时的常用方法.分享给大家供大家参考,具体如下: 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState){ super.onC

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android实现淘宝客户端倒计时界面

    在前面的文章中,我们分析了淘宝android客户端的一些界面实现和用户体验,今天这篇文章,主要介绍如何使用自定义控件,实现抢购倒计时的功能. 首先,我们看一下实现的效果. 实现效果很简单哈,就是一个倒计时的自定义控件. 下面简单介绍一下实现的思路. 首先,显示时间使用的是Textview,因为没有很特殊的效果,因此,我们可以自己写一个简单的布局文件,来作为显示的界面. 而关于时间的变更,我们使用timer类就可以实现,用一个1000毫秒的Timer,每过一秒,更新一下界面即可. 但是在更新时间的

  • Android打开淘宝客户端(手淘)效果及实现代码

    隐式调用的方法就不讲了,如果安装了手淘的SDK或阿里百川之类的东西请参考官方文档,有了文档这些都不是问题. 一.应用内打开 应用内部调用淘宝,当展示"最近运行的应用"时只会显示一个应用,前提是安装了淘宝客户端. 效果图: 首先判断应用是否安装: private boolean isAppInstalled(Context context, String uri) { PackageManager pm = context.getPackageManager(); boolean ins

  • Android仿淘宝商品浏览界面图片滚动效果

    用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个ScrollView滚动到最底下时会有提示,继续拖动才能浏览图片.仿照这个效果写一个出来并不难,只要定义一个Layout管理两个ScrollView就行了,当第一个ScrollView滑到底部时,再次向上滑动进入第二个ScrollView.效果如下: 需要注意的地方是: 1.如果是手动滑到底部需要再次按下才能继续往下滑,自动滚动到底部则不需要 2.在由上一个ScrollView滑动到下一个ScrollView的过程中多只手指相继拖动也不会导

  • Android实现淘宝倒计时功能

    本文实例为大家分享了Android实现淘宝倒计时的具体代码,供大家参考,具体内容如下 一.效果图(这里为了方便我就没弄gif图了,功能是能动的) 二.实现步骤 1.自定义倒计时控件. package com.cqxxny.myapplication; import android.annotation.SuppressLint; import android.content.Context; import android.os.Handler; import android.os.Message

  • Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能

    需要做一个仿淘宝客户端ViewPager滑动到最后一页,再拖动的时候跳到详情的功能,刚开始没什么思路,后来搜了一下,发现有好几种实现方法,最好的一种就是在ViewPager图片的后面再加一个view,然后滑动viewpager的时候,判断一下就行了. 附一个链接,我写的代码就是参考的这个,稍微改了一点点,先看看效果图. 实现起来比较简单,先写一个滑动加载详情的布局,然后在viewpager的instantiateItem里面判断一下,如果是最后一张,就显示加载详情的那个布局.不过需要注意的是,v

  • Android仿淘宝商品拖动查看详情及标题栏渐变功能

    绪论 最近一直比较忙,也没抽出时间来写博客,也不得不说是自己犯了懒癌,人要是一懒就什么事都不想做了,如果不能坚持下来的话,那么估计就废了,��.最近自己攒了好多东西,接下来的时间我会慢慢都分享出来的.好了废话不多说了,下面我们开始正题: 今天要分享的是淘宝的详情页,之前在淘宝上买东西的时候看到淘宝的详情页效果比较不错,所以今天就来仿一下它的效果吧,可能没有淘宝的好,希望见谅啊. 先上效果图: 这是淘宝的: 我自己做的: 怎么样效果还差不多吧?GIF图效果看的不太清楚,见谅. 下面我们来看看怎么实

  • Android实现淘宝选中商品尺寸的按钮组实例

    话不多说,先上个效果图: 现在我们就来说说里面的一些原理把! 一.原理: 1.其实这里我们用到的是一个ViewGroup控件组,把这些按钮加进去就有这种效果了!不过这里要继承ViewGroup(命名为:GoodsViewGroup)重写里面的一些方法. 2.主要的方法有: GoodsViewGroup按钮组的控件大小 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 里面的按钮每个的位置坐标 protect

  • Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解

    一.淘宝商品详情页效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView的竖直排列,以及滑动事件的处理.如下图 三.具体实现 1.继承viewGroup自定义布局View 重写onMeasure()和onLayout方法,在onLayout方法中完成对两个子ScrollView的竖直排列布局,代码如下: 布局文件: <RelativeLayout xmlns:android="http:/

  • JS实现的仿淘宝交易倒计时效果

    本文实例讲述了JS实现的仿淘宝交易倒计时效果.分享给大家供大家参考,具体如下: <script type="text/javascript"> var StartTime = new Date("2015/11/11 12:34:03"); document.write("订购时间: " + StartTime.toLocaleDateString() + StartTime.toLocaleTimeString() + "

随机推荐