美文网首页iOS开发攻城狮的集散地
抢购类倒计时实现 (包括天数,小时,分钟,秒)

抢购类倒计时实现 (包括天数,小时,分钟,秒)

作者: 世道无情 | 来源:发表于2018-08-23 08:26 被阅读176次
    1. 概述

    对于类似抢购的倒计时含有天、时、分、秒的实现,一般在电商项目或者其他项目居多,记录下自己在项目中的实现,代码是参照网上的,下图是自己实现的效果

    图片.png
    2. 思路如下

    倒计时采用的是 handler+Message实现的

    3. 代码如下:

    1>:MainActivity 代码如下
    public class MainActivity extends Activity {
     
        private RelativeLayout countDown;
        // 倒计时
        private TextView daysTv, hoursTv, minutesTv, secondsTv;
        private long mDay = 10;
        private long mHour = 10;
        private long mMin = 30;
        private long mSecond = 00;// 天 ,小时,分钟,秒
        private boolean isRun = true;
        private Handler timeHandler = new Handler() {
     
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what==1) {
                    computeTime();
                    daysTv.setText(mDay+"");
                    hoursTv.setText(mHour+"");
                    minutesTv.setText(mMin+"");
                    secondsTv.setText(mSecond+"");
                    if (mDay==0&&mHour==0&&mMin==0&&mSecond==0) {
                        countDown.setVisibility(View.GONE);
                    }
                }
            }
        };
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            countDown = (RelativeLayout) findViewById(R.id.countdown_layout);
            daysTv = (TextView) findViewById(R.id.days_tv);
            hoursTv = (TextView) findViewById(R.id.hours_tv);
            minutesTv = (TextView) findViewById(R.id.minutes_tv);
            secondsTv = (TextView) findViewById(R.id.seconds_tv);
     
            startRun();             
        }
        
        /**
         * 开启倒计时 
         */
        private void startRun() {
            new Thread(new Runnable() {
     
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    while (isRun) {
                        try {
                            Thread.sleep(1000); // sleep 1000ms
                            Message message = Message.obtain();
                            message.what = 1;
                            timeHandler.sendMessage(message);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
     
        /**
         * 倒计时计算
         */
        private void computeTime() {
            mSecond--;
            if (mSecond < 0) {
                mMin--;
                mSecond = 59;
                if (mMin < 0) {
                    mMin = 59;
                    mHour--;
                    if (mHour < 0) {
                        // 倒计时结束
                        mHour = 23;
                        mDay--;
                    }
                }
            }
        }
    }
    
    2>:activity_main布局文件如下:
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/countdown_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:gravity="center" >
         
            <RelativeLayout
                android:id="@+id/daojishi_rl"
                android:layout_width="match_parent"
                android:layout_height="40.0dip"
                android:layout_marginLeft="10.0dip"
                android:layout_marginRight="10.0dip"
                android:gravity="center" >
         
                <ImageView
                    android:id="@+id/describe_iv"
                    android:layout_width="40.0dip"
                    android:layout_height="40.0dip"
                    android:background="@drawable/daojishi"
                    android:gravity="center_vertical" />
         
                <TextView
                    android:id="@+id/describe_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="5.0dip"
                    android:layout_toRightOf="@+id/describe_iv"
                    android:text="距离开团还有 "
                    android:textSize="25sp" />
         
                <TextView
                    android:id="@+id/days_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_toRightOf="@+id/describe_tv"
                    android:background="@drawable/daojishiframe"
                    android:gravity="center"
                    android:text="20"
                    android:textSize="20sp" />
         
                <TextView
                    android:id="@+id/colon0"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5.0dip"
                    android:layout_marginRight="3.0dip"
                    android:layout_toRightOf="@+id/days_tv"
                    android:text="天"
                    android:textSize="20sp"
                    android:textStyle="bold" />
            </RelativeLayout>
         
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/daojishi_rl"
                android:gravity="center_horizontal" >
         
                <TextView
                    android:id="@+id/hours_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_toLeftOf="@+id/colon1"
                    android:background="@drawable/daojishiframe"
                    android:gravity="center"
                    android:text="23"
                    android:textSize="20sp" />
         
                <TextView
                    android:id="@+id/colon1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="3.0dip"
                    android:layout_marginRight="3.0dip"
                    android:layout_toLeftOf="@+id/minutes_tv"
                    android:text=":"
                    android:textSize="20sp"
                    android:textStyle="bold" />
         
                <TextView
                    android:id="@+id/minutes_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_toLeftOf="@+id/colon2"
                    android:background="@drawable/daojishiframe"
                    android:gravity="center"
                    android:text="59"
                    android:textSize="20sp" />
         
                <TextView
                    android:id="@+id/colon2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="3.0dip"
                    android:layout_marginRight="3.0dip"
                    android:layout_toLeftOf="@+id/seconds_tv"
                    android:text=":"
                    android:textSize="20sp"
                    android:textStyle="bold" />
         
                <TextView
                    android:id="@+id/seconds_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/daojishiframe"
                    android:gravity="center"
                    android:text="59"
                    android:textSize="20sp" />
            </RelativeLayout>
         
        </RelativeLayout>
    

    相关文章

      网友评论

      • dev晴天:我记得安卓好像有提供倒计时的api😂
      • 墨染书:可是可能会内存泄露,感觉可以改进哦😬
        世道无情:可以在合适时机对handler进行移除消息然后置为null:smile:

      本文标题:抢购类倒计时实现 (包括天数,小时,分钟,秒)

      本文链接:https://www.haomeiwen.com/subject/siujiftx.html