前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2014-10-23android学习----Android应用项目的欢迎activity怎么写?

2014-10-23android学习----Android应用项目的欢迎activity怎么写?

作者头像
wust小吴
发布2019-07-05 11:36:36
3670
发布2019-07-05 11:36:36
举报
文章被收录于专栏:风吹杨柳风吹杨柳

我们知道,很多软件有时候需要首先显示的就是welcome界面,比如UC浏览器,淘宝,今日头条等等,

一开软件,首先看到的就是欢迎界面,几秒钟之后才正式进入软件的主界面

我这里用今日头条看看怎么实现这个功能:

1.在layout里面创建一个welcome.xml资源文件,

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
        android:src="@drawable/splash" />

</RelativeLayout>

这个布局上只放一个ImageView控件就可以,就是放一张图片,这个图片的地址是:在drawable文件夹下面的名称叫做splash的图片

注意:

1)这里我们首先就是需要熟悉drawable文件代表啥意思,这个文件就是放图片的,但是我们经常看到很多带有后缀的drawable文件,这是啥意思呢?如下图:

像上面的:-hdpi,-ldpi,-mdpi,-xhdpi  它们说的是一个分辨率的问题,其实系统在这里很智能的,它可以自动根据你的模拟器或者你的手机

分别到这几个文件夹里面去找对应的图片。

如果各个分辨率文件里面没有找到与之相匹配的图片的,那么系统就去drawable文件夹下面找。

** 要注意一点,drawable文件夹里面的图片命名是不能大写的

2)android:scaleType是控制图片如何resized/moved来匹对ImageView的size

在ImageView里面我们都是设置它的size为填充父窗体

FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示

2.创建好布局文件之后,我们需要去写activity类了,这个类名就叫做:Welcome.java  

代码语言:javascript
复制
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;

public class Welcome extends Activity {
	
	private AlphaAnimation start_anima;
	View view;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		view = View.inflate(this, R.layout.welcome, null);
		setContentView(view);
		initView();
		initData();
		
	}

	private void initData() {
		// TODO Auto-generated method stub
		start_anima = new AlphaAnimation(0.3f, 1.0f);
		start_anima.setDuration(2000);
		view.startAnimation(start_anima);
		start_anima.setAnimationListener(new AnimationListener() {
			
			@Override
			public void onAnimationStart(Animation animation) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onAnimationRepeat(Animation animation) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onAnimationEnd(Animation animation) {
				// TODO Auto-generated method stub
				redirectTo();
			}
		});
		
	}

	protected void redirectTo() {
		// TODO Auto-generated method stub
		startActivity(new Intent(getApplicationContext(), Hello.class));
		finish();
		
	}

	private void initView() {
		// TODO Auto-generated method stub
		
		
	}
	

}

1)定义一个AlphaAnimation 动画  对象,private AlphaAnimation start_anima;

窗口的动画效果,淡入淡出什么的,有些游戏的欢迎动画,logo的淡入淡出效果就使用AlphaAnimation

2)定义一个View对象   View view;

3)加载布局:

    view = View.inflate(this, R.layout.welcome, null);//inflate  就是填充的意思,这个函数就是实例化view对象    setContentView(view);

//上面的两行代码可以写成一行:setContentView(R.layout.welcome);

4)初始化视图,初始化动画   

 initView(); initData();

5)初始化动画的处理

首先看这三行代码:

 start_anima = new AlphaAnimation(0.3f, 1.0f);

// new出来一个AlphaAnimation类,实例化start_anima对象,在我们的成员变量声明的时候最好不要立马就new出来,只有用到的时候

// 才去new,这将可以节省内存的开销。 start_anima.setDuration(2000);// 设置动画的时间,android工程里面好像所有的控件时间设置都是Duration属性,单位是毫秒 view.startAnimation(start_anima);// 把这个动画类放到view视图上面

接下来就是动画对象start_anima对象的监听事件了:

start_anima.setAnimationListener(new AnimationListener() { // 有时候我们不知道我们想要的监听事件件什么名字,可以打出start_anima,然后按快捷键alt+/,就会出来很多,这个时候我们去找

         // 相应的静态方法,如果我们不知道这个方法是怎么用的,我们可以去说明文档里面 查看他们的用法

 // 这里面监听事件里面是用内部类实现的,实现重载函数

 // 其实下面的三个重载函数,就是这个AnimationListener的生命周期,start  repeat end,我们需要做的就是在end的时候跳到第二个

 // activity界面去,所有我们这里就只需要在onAnimationEnd(Animation animation)增加代码即可

 // 要想进一步弄清楚这三个生命周期的具体情况,我们可以在各个函数里面加个System.out.println();然后从logcat里面可以看到他们

// 运行的顺序,这里我不去展示了 @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub redirectTo();// 2秒之后跳转到主界面 } });

6)跳转函数的处理

protected void redirectTo() { // TODO Auto-generated method stub

 // 在这个函数里面,我们调用   意图  去实现activity之间的通信

 // Intent(getApplicationContext(), Hello.class),它的构造方法一个参数是上下文,一个是哪个activity类,这里上下文最好不要写this startActivity(new Intent(getApplicationContext(), Hello.class)); finish();//介绍当前的activity }

注意://  finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存, 活动的资源并没有被清理;当调用System.exit(0)时,杀死了整个进程,这时候活动所占的资源也会被释放

private void initView() { // TODO Auto-generated method stub // 这个函数不需要做任何的处理 }

至此,activity就写好了,那么接下来就是清单文件的处理了:

3.配置清单文件

代码语言:javascript
复制
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".Welcome"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.wust.three.Hello" >
        </activity>
    </application>

1)我们加了两个activity节点,一个welcome的activity,一个hello的activity,其中welcome的activity加了<intent-filter>子节点,它表示的意思就是:在手机上生成一个图标

而hello的节点的activity是不需要这个<intent-filter>子节点的属性的。

经过上面的三个步骤,整个需求也就写完了,欢迎界面成功搞定:把整个项目clean一把,然后run as  测试结果:

2秒之后跳转:

跳转的主界面我还没有处理,目前就输出一个hello作为演示而用。

这里面还需要去关注两个个知识点:

1)就是动画类

android中提供了4中动画: 

AlphaAnimation 透明度动画效果 

ScaleAnimation 缩放动画效果 

TranslateAnimation 位移动画效果 

RotateAnimation 旋转动画效果 

大家有时间可以去看看他们的用法!

2)finish()和exit()两种结束方法

要想弄清楚他们,我觉得最好放在生命周期里面是查看效果是最好的,

下次有机会去实现下他们,搞懂这里面的机制。

如有问题,请指出,感激不尽!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年10月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档