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.各种形状的背景的设计