iOS开发攻城狮的集散地

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

2018-08-23  本文已影响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>
上一篇下一篇

猜你喜欢

热点阅读