我是靠谱客的博主 花痴草莓,最近开发中收集的这篇文章主要介绍android 启动活动 动画,Android 启动页过渡动画效果实现(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Android 启动页过渡动画效果实现(一)

一.场景1(缩放动画-有小逐渐变大效果)(以下均贴出全部代码(图标、颜色等属性除外),复制即用)

1.效果图:

lj710qzxo-crwjh8xbixqzicintf

2.主要函数代码:

import android.animation.FloatEvaluator;

import android.animation.ValueAnimator;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.WindowManager;

import android.widget.ImageView;

import com.hjq.demo.R;

import com.hjq.demo.ui.activity.sgf.banner.RegionTypeDetailsActivity;

import java.util.Calendar;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.RecyclerView;

import butterknife.BindView;

import butterknife.ButterKnife;

/**

* 仿开眼短视频启动动画

* https://github.com/darryrzhong/OpenEyes

* https://github.com/forvv231/EasyScollImage

*/

public final class OpenEyesActivity extends AppCompatActivity {

@BindView(R.id.iv_bg)

ImageView imageView;

private RecyclerView mRecyclerView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_guide_openeyes);

ButterKnife.bind(this);

initBackground();

startAnimation();//开启动画效果

}

private void initBackground() {

Calendar c = Calendar.getInstance();

int day = c.get(Calendar.DAY_OF_WEEK)-1;

Log.e("!!!!!!!!",day+"");

switch (day){

case 0:

imageView.setBackgroundResource(R.drawable.wallpaper_6);

break;

case 1:

imageView.setBackgroundResource(R.drawable.wallpaper_12);

break;

case 2:

imageView.setBackgroundResource(R.drawable.wallpaper_7);

break;

case 3:

imageView.setBackgroundResource(R.drawable.wallpaper_10);

break;

case 4:

imageView.setBackgroundResource(R.drawable.wallpaper_8);

break;

case 5:

imageView.setBackgroundResource(R.drawable.wallpaper_11);

break;

case 6:

imageView.setBackgroundResource(R.drawable.wallpaper_9);

break;

default:

imageView.setBackgroundResource(R.drawable.wallpaper_9);

}

}

private void startAnimation() {

final View splashIv = findViewById(R.id.iv_bg);

ValueAnimator animator = ValueAnimator.ofObject(new FloatEvaluator(),1.0f,1.2f);

animator.setDuration(3000);

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

Float value = (Float) animation.getAnimatedValue();

if (value != 1.2f) {

splashIv.setScaleX(value);

splashIv.setScaleY(value);

} else {

goToActivity();

}

}

private void goToActivity() {

Intent intent = new Intent(OpenEyesActivity.this, RegionTypeDetailsActivity.class);

startActivity(intent);

overridePendingTransition(0, android.R.anim.fade_out);

finish();

}

});

animator.start();

}

}

3.布局代码:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/iv_bg"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android:id="@+id/spash_tv_english"

android:layout_marginTop="20dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/white"

android:layout_centerInParent="true"

android:textSize="25sp"

android:text="Eyepetizer" />

android:id="@+id/tv1"

android:text="Daily appetizers for your eyes,Bon eyepetit"

android:textColor="@color/white"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_above="@id/textView"/>

android:layout_marginTop="20dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/white"

android:text="每日精选视频推介,让你大开眼界。"

android:layout_marginBottom="46dp"

android:id="@+id/textView"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true" />

4.自定义TextView

import android.annotation.SuppressLint;

import android.content.Context;

import android.content.res.AssetManager;

import android.graphics.Typeface;

import android.util.AttributeSet;

import android.widget.TextView;

import androidx.annotation.Nullable;

/**

* 自定义定制字体的TextView

*/

@SuppressLint("AppCompatCustomView")

public class CustomTextView extends TextView {

public CustomTextView(Context context) {

super(context);

init(context);

}

public CustomTextView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context);

}

public CustomTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init(context);

}

/*

* 定制字体

* */

private void init(Context context) {

AssetManager assets = context.getAssets();//获取资源文件

Typeface font = Typeface.createFromAsset(assets,"fonts/Lobster-1.4.otf");

setTypeface(font);

}

}

5.项目案例推荐:

TextView定制字体式样的资源文件请到GitHub上搜索(提供几个案例,直接到里面复制即可):

二.场景2(缩放动画-有小逐渐变大效果,旋转动画-360旋转)

1.效果图:

fk_6p5pbq_r6edmjntq5a_o_nm15

2.主函数代码:

import android.view.View;

import android.view.animation.AlphaAnimation;

import android.view.animation.Animation;

import android.view.animation.RotateAnimation;

import android.view.animation.ScaleAnimation;

import com.gyf.immersionbar.BarHide;

import com.hjq.demo.R;

import com.hjq.demo.common.MyActivity;

import com.hjq.demo.other.AppConfig;

import com.hjq.permissions.OnPermission;

import com.hjq.permissions.Permission;

import com.hjq.permissions.XXPermissions;

import java.util.List;

import butterknife.BindView;

/**

* github : https://github.com/getActivity/AndroidProject

*/

public final class SplashActivity extends MyActivity

implements OnPermission, Animation.AnimationListener {

private static final int ANIM_TIME = 1000;

@BindView(R.id.iv_splash_bg)

View mImageView;

@BindView(R.id.iv_splash_icon)

View mIconView;

@BindView(R.id.iv_splash_name)

View mNameView;

@BindView(R.id.tv_splash_debug)

View mDebugView;

@Override

protected int getLayoutId() {

return R.layout.activity_splash;

}

@Override

protected void initView() {

// 初始化动画

AlphaAnimation aa = new AlphaAnimation(0.4f, 1.0f);

aa.setDuration(ANIM_TIME * 2);

aa.setAnimationListener(this);

mImageView.startAnimation(aa);

ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

sa.setDuration(ANIM_TIME);

mIconView.startAnimation(sa);

RotateAnimation ra = new RotateAnimation(180, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

ra.setDuration(ANIM_TIME);

mNameView.startAnimation(ra);

// 设置状态栏和导航栏参数

getStatusBarConfig()

// 有导航栏的情况下,activity全屏显示,也就是activity最下面被导航栏覆盖,不写默认非全屏

.fullScreen(true)

// 隐藏状态栏

.hideBar(BarHide.FLAG_HIDE_STATUS_BAR)

// 透明导航栏,不写默认黑色(设置此方法,fullScreen()方法自动为true)

.transparentNavigationBar()

.init();

}

@Override

protected void initData() {

if (AppConfig.isDebug()) {

mDebugView.setVisibility(View.VISIBLE);

} else {

mDebugView.setVisibility(View.INVISIBLE);

}

}

private void requestPermission() {

XXPermissions.with(this)

.permission(Permission.Group.STORAGE)

.request(this);

}

/**

* {@link OnPermission}

*/

@Override

public void hasPermission(List granted, boolean isAll) {

startActivityFinish(HomeActivity.class);

}

@Override

public void noPermission(List denied, boolean quick) {

if (quick) {

toast(R.string.common_permission_fail);

XXPermissions.gotoPermissionSettings(SplashActivity.this, true);

} else {

toast(R.string.common_permission_hint);

postDelayed(this::requestPermission, 1000);

}

}

@Override

public void onBackPressed() {

//禁用返回键

//super.onBackPressed();

}

@Override

protected void onRestart() {

super.onRestart();

if (XXPermissions.isHasPermission(SplashActivity.this, Permission.Group.STORAGE)) {

hasPermission(null, true);

} else {

requestPermission();

}

}

/**

* {@link Animation.AnimationListener}

*/

@Override

public void onAnimationStart(Animation animation) {}

@Override

public void onAnimationEnd(Animation animation) {

requestPermission();

}

@Override

public void onAnimationRepeat(Animation animation) {}

}

3.布局代码:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".ui.activity.SplashActivity">

android:id="@+id/iv_splash_bg"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scaleType="centerCrop"

android:src="@drawable/bg_launcher" />

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center"

android:layout_marginTop="75dp"

android:layout_marginBottom="50dp">

android:id="@+id/iv_splash_icon"

android:layout_centerHorizontal="true"

android:layout_width="200dp"

android:layout_height="200dp"

android:src="@drawable/ic_logo" />

android:id="@+id/iv_splash_name"

android:layout_below="@+id/iv_splash_icon"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="50dp"

android:gravity="center"

android:text="@string/app_name"

android:textColor="@color/white90"

android:textSize="20sp" />

android:id="@+id/tv_splash_debug"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal|bottom"

android:layout_marginBottom="30dp"

android:text="Debug"

android:textColor="@color/white80"

android:textSize="14sp"

tools:ignore="HardcodedText" />

项目案例推荐:

三.场景3(缩放动画-有小逐渐变大效果,旋转动画-360旋转)

1.效果图:

fsdu0ku43u767sjhanbxtdv-djdh

2.主函数代码:

import android.animation.FloatEvaluator;

import android.animation.ValueAnimator;

import android.annotation.SuppressLint;

import android.app.Application;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.view.WindowManager;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.ImageView;

import android.widget.TextView;

import com.hjq.demo.R;

import com.hjq.demo.common.MyApplication;

import com.hjq.demo.ui.activity.sgf.banner.RegionTypeDetailsActivity;

import java.util.Calendar;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.RecyclerView;

import butterknife.BindView;

import butterknife.ButterKnife;

/**

* app启动动画系列

* https://github.com/darryrzhong/OpenEyes

* https://github.com/forvv231/EasyScollImage

*/

public final class SgfSplashActivity extends AppCompatActivity {

Animation myAnimation;

Animation backAnimation;

//用于更新在主线程的UI

@SuppressLint("HandlerLeak")

Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.arg1){

case 0: {

myAnimation = AnimationUtils.loadAnimation(MyApplication.getInstance(), R.anim.my_anim);

imgPic.startAnimation(myAnimation);

imgPic.setVisibility(View.VISIBLE);

}break;

case 1: {

myAnimation = AnimationUtils.loadAnimation(MyApplication.getInstance(), R.anim.my_anim_rotate);

// myAnimation = AnimationUtils.loadAnimation(MyApplication.getInstance(), R.anim.my_anim_translate);

context.startAnimation(myAnimation);

context.setVisibility(View.VISIBLE);

}break;

case 2: {

backAnimation = AnimationUtils.loadAnimation(MyApplication.getInstance(), R.anim.my_anim_scale);

back.startAnimation(backAnimation);

back.setVisibility(View.VISIBLE);

}break;

}

}

};

private ImageView imgPic;

private TextView back;

private TextView context;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_sgf_splash);

ButterKnife.bind(this);

// //通过loadAnimation函数 把动画效果的xml文件加载进来 实例化动作类

// myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_anim);

// //控件开始动作

// imgPic.startAnimation(myAnimation);

imgPic = (ImageView)findViewById(R.id.im_pic);

imgPic.setVisibility(View.INVISIBLE);

back = (TextView)findViewById(R.id.tv_back);

// back.setVisibility(View.INVISIBLE);

context = (TextView)findViewById(R.id.tv_context);

context.setVisibility(View.INVISIBLE);

new Thread(new Runnable() {

@Override

public void run() {

//进去隔一秒 出现askFood

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

Message ok = new Message();

ok.arg1 = 0;//区分更新什么UI

handler.sendMessage(ok);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//第一个动作执行后,隔两秒执行LWGstudio出现的动作

ok = new Message();

ok.arg1 = 1;//区分更新什么UI

handler.sendMessage(ok);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//最后动作

ok = new Message();

ok.arg1 = 2;//区分更新什么UI

handler.sendMessage(ok);

}

}).start();

}

}

3.布局:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:background="@drawable/wallpaper_11"

android:layout_height="match_parent">

android:id="@+id/im_pic"

android:layout_marginTop="90dp"

android:layout_centerHorizontal="true"

android:src="@drawable/ic_share_wechat"

android:layout_width="100dp"

android:layout_height="100dp" />

android:id="@+id/tv_context"

android:layout_marginTop="20dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/white"

android:layout_centerInParent="true"

android:textSize="25sp"

android:text="Eyepetizer" />

android:id="@+id/tv_back"

android:text="Daily appetizers for your eyes,Bon eyepetit"

android:textColor="@color/white"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_above="@id/textView"/>

android:layout_marginTop="20dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/white"

android:text="每日精选视频推介,让你大开眼界。"

android:layout_marginBottom="46dp"

android:id="@+id/textView"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true" />

4.xml动画:

a.my_anim.xml(渐变动画)

android:duration="1000"

android:fromAlpha="0.0"

android:toAlpha="1.0" />

b.my_anim_scale.xml(缩放动画)

android:duration="1000"

android:fillAfter="false"

android:fromXScale="0.0"

android:fromYScale="0.0"

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:pivotX="50%"

android:pivotY="50%"

android:toXScale="1.4"

android:toYScale="1.4" />

c.my_anim_rotate.xml(旋转动画)

android:duration="3000"

android:fromDegrees="0"

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:pivotX="50%"

android:pivotY="50%"

android:toDegrees="+350" />

d.my_anim_translate.xml (平移动画)

android:duration="2000"

android:fromXDelta="30"

android:fromYDelta="30"

android:toXDelta="-80"

android:toYDelta="300" />

flqg8kvi_slwejwc-wyc271x23ss

上图的弹性动画xml代码:(使用动画插值器)

e.my_anim_translate_bounce.xml

android:interpolator="@android:anim/bounce_interpolator">

android:duration="1000"

android:fromXDelta="500"

android:fromYDelta="0"

android:toXDelta="0"

android:toYDelta="0" />

补充:

Android内置了9种内置的插值器实现,如下所示:

动画加速进行    @android:anim/accelerate_interpolator    AccelerateInterpolator

快速完成动画,超出终点后再回退到终点    @android:anim/overshoot_interpolator    OvershootInterpolator

先退后再加速前进    @android:anim/anticipate_interpolator    AnticipateInterpolator

先加速再减速    @android:anim/accelerate_decelerate_interpolator    AccelerateDecelerateInterpolator

先退后再加速,超出终点后再回退到终点    @android:anim/anticipate_overshoot_interpolator    AnticipateOvershootInterpolator

最后阶段弹球效果    @android:anim/bounce_interpolator    BounceInterpolator

周期运动    @android:anim/cycle_interpolator    CycleInterpolator

减速    @android:anim/decelerate_interpolator    DecelerateInterpolator

匀速    @android:anim/linear_interpolator    LinearInterpolator

系统默认的插值器是AccelerateDecelerateInterpolator,即先加速后减速

fmcgut4xm1gog3ccpw16rfh9rdfy

四.场景4(位移动画-由下到上,透明渐变)

1.效果图:

fnqzvbbvytukz9nn1daefynn1imt

2.主函数代码:

两个activity实现的一个效果

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.view.KeyEvent;

import android.view.WindowManager;

import androidx.appcompat.app.AppCompatActivity;

/**

* app启动动画系列

* https://github.com/HMonkey1024/MyLauncher

* https://github.com/darryrzhong/OpenEyes

*/

public final class SgfSplash3Activity extends AppCompatActivity {

private Handler handler = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 注意:此处将setContentView()方法注释掉

// setContentView(R.layout.activity_start);

handler.postDelayed(new Runnable() {

@Override

public void run() {

gotoLogin();

}

}, 2000);

}

/**

* 前往注册、登录主页

*/

private void gotoLogin() {

Intent intent = new Intent(SgfSplash3Activity.this, SgfSplash2Activity.class);

startActivity(intent);

finish();

//取消界面跳转时的动画,使启动页的logo图片与注册、登录主页的logo图片完美衔接

overridePendingTransition(0, 0);

}

/**

* 屏蔽物理返回键

*/

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

return true;

}

return super.onKeyDown(keyCode, event);

}

@Override

protected void onDestroy() {

if (handler != null) {

//If token is null, all callbacks and messages will be removed.

handler.removeCallbacksAndMessages(null);

}

super.onDestroy();

}

}

import android.animation.Animator;

import android.animation.AnimatorListenerAdapter;

import android.animation.AnimatorSet;

import android.animation.ObjectAnimator;

import android.content.Context;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.KeyEvent;

import android.view.View;

import android.view.WindowManager;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import com.hjq.demo.R;

import androidx.appcompat.app.AppCompatActivity;

import butterknife.ButterKnife;

/**

* app启动动画系列

* https://github.com/HMonkey1024/MyLauncher

* https://github.com/darryrzhong/OpenEyes

*/

public final class SgfSplash2Activity extends AppCompatActivity {

private long exitTime;

private TextView tvRegister;

private TextView tvLogin;

private ImageView ivLogo;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//全屏

// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_sgf_splash2);

ButterKnife.bind(this);

initViews();

initAnims();

}

/**

* 初始化View控件

*/

private void initViews() {

tvLogin = (TextView) findViewById(R.id.tv_login);

tvRegister = (TextView) findViewById(R.id.tv_register);

ivLogo = (ImageView) findViewById(R.id.iv_logo);

}

/**

* 初始化logo图片以及底部注册、登录的按钮动画

*/

private void initAnims() {

//初始化底部注册、登录的按钮动画

//以控件自身所在的位置为原点,从下方距离原点200像素的位置移动到原点

ObjectAnimator tranLogin = ObjectAnimator.ofFloat(tvLogin, "translationY", 200, 0);

ObjectAnimator tranRegister = ObjectAnimator.ofFloat(tvRegister, "translationY", 200, 0);

//将注册、登录的控件alpha属性从0变到1

ObjectAnimator alphaLogin = ObjectAnimator.ofFloat(tvLogin, "alpha", 0, 1);

ObjectAnimator alphaRegister = ObjectAnimator.ofFloat(tvRegister, "alpha", 0, 1);

final AnimatorSet bottomAnim = new AnimatorSet();

bottomAnim.setDuration(1000);

//同时执行控件平移和alpha渐变动画

bottomAnim.play(tranLogin).with(tranRegister).with(alphaLogin).with(alphaRegister);

//获取屏幕高度

WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics metrics = new DisplayMetrics();

manager.getDefaultDisplay().getMetrics(metrics);

int screenHeight = metrics.heightPixels;

//通过测量,获取ivLogo的高度

int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

ivLogo.measure(w, h);

int logoHeight = ivLogo.getMeasuredHeight();

//初始化ivLogo的移动和缩放动画

float transY = (screenHeight - logoHeight) * 0.28f;

//ivLogo向上移动 transY 的距离

ObjectAnimator tranLogo = ObjectAnimator.ofFloat(ivLogo, "translationY", 0, -transY);

//ivLogo在X轴和Y轴上都缩放0.75倍

ObjectAnimator scaleXLogo = ObjectAnimator.ofFloat(ivLogo, "scaleX", 1f, 0.75f);

ObjectAnimator scaleYLogo = ObjectAnimator.ofFloat(ivLogo, "scaleY", 1f, 0.75f);

AnimatorSet logoAnim = new AnimatorSet();

logoAnim.setDuration(1000);

logoAnim.play(tranLogo).with(scaleXLogo).with(scaleYLogo);

logoAnim.start();

logoAnim.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

//待ivLogo的动画结束后,开始播放底部注册、登录按钮的动画

bottomAnim.start();

}

});

}

/**

* 重写返回键,实现双击退出效果

*/

// @Override

// public boolean onKeyDown(int keyCode, KeyEvent event) {

// if (keyCode == KeyEvent.KEYCODE_BACK) {

// if (System.currentTimeMillis() - exitTime > 2000) {

Toast.makeText(LoginMainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();

// exitTime = System.currentTimeMillis();

// } else {

LoginMainActivity.this.finish();

// }

// return true;

// }

// return super.onKeyDown(keyCode, event);

// }

}

3.布局和属性:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/white"

tools:context=".ui.activity.sgf.guide.SgfSplash2Activity">

android:id="@+id/tv_login"

android:layout_width="250dp"

android:layout_height="45dp"

android:layout_above="@+id/tv_register"

android:layout_centerHorizontal="true"

android:layout_marginBottom="23dp"

android:alpha="0"

android:background="@drawable/shape_gradient"

android:gravity="center"

android:text="登录"

android:textColor="@color/white"

android:textSize="15sp" />

android:id="@+id/tv_register"

android:layout_width="250dp"

android:layout_height="45dp"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:layout_marginBottom="102dp"

android:alpha="0"

android:background="@drawable/shape_gradient"

android:gravity="center"

android:text="新用户注册"

android:textColor="@color/white"

android:textSize="15sp" />

android:id="@+id/iv_logo"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:src="@drawable/ic_launcher" />

渐变背景色:

android:angle="180"

android:endColor="#387cfd"

android:startColor="#26c4fd"

android:type="linear" />

android:name=".ui.activity.sgf.guide.SgfSplash2Activity"

android:configChanges="orientation|screenSize|keyboardHidden"

android:screenOrientation="portrait" />

android:name=".ui.activity.sgf.guide.SgfSplash3Activity"

android:theme="@style/AppTheme.Launcher"

android:configChanges="orientation|screenSize|keyboardHidden"

android:screenOrientation="portrait" />

style

@drawable/layer_launcher

true

true

layer_launcher.xml

android:gravity="center"

android:src="@drawable/wallpaper_11" />

4.在这个案例中有对启动页黑屏或白屏的简单处理:

解决方法:

a.禁用Preview Window(不建议使用):

既然APP启动时的黑白屏是由Preview引起的,那系统有没有提供禁用的方法呢? 答案是肯定的。黑白屏的问题是解决了,但点击应用图标后会有一段时间没有响应。用户体验不好,违背了优化的初衷。修改上述style 如下:

true

true

true

b.使用透明主题(不建议使用)

true

true

true

特点:应用启动慢,刷新同步,界面会一次性刷新出来。由于背景透明,初始化的过程中,用户看到的是桌面,有种错觉

c.修改windowBackground属性(建议使用此方法)

@drawable/layer_launcher

true

true

自定义layer-list: layer_launcher.xml 代码如下:

android:gravity="center"

android:src="@drawable/launch_logo" />

特点:应用启动快,非同步刷新,界面会先显示背景图,然后再刷新其他控件,个人比较推荐。

将第一个启动的activity的布局setContentView(R.layout.activity_xxx); 去掉;

Android 启动页过渡动画效果实现(一)

*推荐一个极品美图网站:

最后

以上就是花痴草莓为你收集整理的android 启动活动 动画,Android 启动页过渡动画效果实现(一)的全部内容,希望文章能够帮你解决android 启动活动 动画,Android 启动页过渡动画效果实现(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部