2.APP欢迎页面的设计(一)

实现效如下所示
2.APP欢迎页面的设计(一)
实现这样的设计需要创建两个活动以及一个CountDownTimer类,分别命名WelcomeActivity和MainActivity。
具体程序设计如下:
WelcomeActivity.class

package com.example.r.achat;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class WelcomeActivity extends AppCompatActivity {
    private TextView tv;
    private Timer timer;
    public final static int CHANGE_ACTIVITY= 1;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome);//进行启动前的必要准备
        tv = (TextView) findViewById(R.id.time_welcome);//获取到“几秒跳过”的TextView的对象
         timer = new Timer(3000,1000,this,tv);//实例化Timer对象并传入时间参数,context以及TextView的对象
         timer.setHd(myhandler);
        timer.start();//启动定时器
        tv.setOnClickListener(new View.OnClickListener() {//对TextView进行监听
            @Override
            public void onClick(View view) {
               if(timer !=null&&timer.getStatus())
               timer.cancel();
                gotoMainActivity();
            }
        });
    }
   

private void gotoMainActivity() {//实现活动间的跳转

    Intent intent = new Intent(this,MainActivity.class);//只能在某个活动中实现这种跳转
   startActivity(intent);
    finish();

}
private final  Handler myhandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        switch (msg.what) {
            case CHANGE_ACTIVITY:
                gotoMainActivity();

        }


    }
};

}

MainActivity,class

package com.example.r.achat;

import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}

Timer.class

package com.example.r.achat;

import android.content.Context;
import android.content.Intent;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import static android.support.v4.content.ContextCompat.startActivity;
import static com.example.r.achat.WelcomeActivity.CHANGE_ACTIVITY;

public class Timer extends CountDownTimer {//继承了CountDownTimer,重载onTick()和onFinish()



   private boolean runstatus = true;
    private TextView textView;
    private Handler hd;
    public Timer(long millisInFuture, long countDownInterval, Context context, View view) {

        super(millisInFuture, countDownInterval);
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        layoutInflater.inflate(R.layout.welcome, null);
        textView = (TextView) view.findViewById(R.id.time_welcome);

    }

    @Override
    public void onTick(long l) {//每隔countDownInterval时间执行一次

        runstatus = true;
        textView.setText(l / 1000 + "s跳过");

    }

    @Override
    public void onFinish() {//millisInFuture时间后执行(定时完成)
        runstatus = false;
        textView.setText("跳过");
        hd.obtainMessage(CHANGE_ACTIVITY).sendToTarget();//向主消息站发送一个消息,等待后续的处理
    }


    public boolean getStatus() {

        return runstatus;

    }


    public void setHd(Handler hd) {

//传递Handler
        this.hd = hd;
    }
}

welcome.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/huaer"
    android:orientation="vertical"
    android:id="@+id/layout_welcome"
    >

    <TextView
        android:id="@+id/time_welcome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3s跳过"
        android:layout_gravity="right|top"
        android:layout_margin="13dp"
        android:background="@drawable/shape"
        android:gravity="center"


         />


</LinearLayout>

对于“几秒跳过”这一TextView的椭圆形的背景可以用下面的方法来实现
新建一个叫shape的xml文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <corners android:radius="20dp"/>
    <solid android:color="#9c9797"/>
    <size android:width="50dp"/>
    <size android:height="20dp"/>
    </shape>

android:shape=“oval” 是定义的椭圆
corners android:radius=“20dp"定义的是四个角的圆角半径(圆角半径也可以分别定义)
solid android:color=”#9c9797"定义背景颜色
size android:width=“50dp”
size android:height="20dp"定义长度和宽度

总结:
这个例子有以下几个重要知识1.CountDownTimer计时器的运用2.使用INTENT进行活动间的切换3.消息的发送和处理4.各种形状的背景的设计