欢迎(闪屏界面) 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_launch"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wansui.gang.LaunchActiviity">
<ImageView
android:id="@+id/iv_launch"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/launch"/>
</RelativeLayout>
package com.wansui.gang.moduls.launch;
import android.view.View;
/**
*抽象策略角色:该角色对算法进行抽象,通常定义每个策略或算法必须具有的方法和属性
*/
public interface ILaunch {
//策略方法(具体的算法接口)
public void delay(View target,Callback callback);
//添加回调
interface Callback{
//call可以传递很多参数
void call();
}
}
package com.wansui.gang.moduls.launch.impl;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.view.View;
import com.wansui.gang.moduls.launch.ILaunch;
import static com.wansui.gang.R.id.iv_launch;
/**
* 具体策略角色:该角色实现抽象策略中的具体操作,含有具体算法
*(专门用来执行过渡动画)
*/
public class LaunchAniamator implements ILaunch {
@Override
public void delay(View target, final Callback callback) {
ObjectAnimator alphaAnimator= ObjectAnimator.ofFloat(iv_launch,"alpha",0.0f,1.0f);
//时间两秒钟
alphaAnimator.setDuration(2000);
alphaAnimator.start();
alphaAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationCancel(Animator animation) {
super.onAnimationCancel(animation);
}
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
//主线程中执行
callback.call();
}
@Override
public void onAnimationRepeat(Animator animation) {
super.onAnimationRepeat(animation);
}
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
}
@Override
public void onAnimationPause(Animator animation) {
super.onAnimationPause(animation);
}
@Override
public void onAnimationResume(Animator animation) {
super.onAnimationResume(animation);
}
});
}
}
package com.wansui.gang.moduls.launch;
import android.view.View;
/**
* 环境角色(上下文角色):屏蔽高层模块对策略、算法的直接访问,它持有一个具体策略角色的引用;
*/
public class LaunchContext {
private ILaunch launch;
private View target;
public LaunchContext(ILaunch launch, View target) {
this.launch = launch;
this.target = target;
}
public void launch(ILaunch.Callback callback) {
this.launch.delay(target,callback);
}
}
package com.wansui.gang;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import com.wansui.gang.moduls.launch.ILaunch;
import com.wansui.gang.moduls.launch.LaunchContext;
import com.wansui.gang.moduls.launch.impl.LaunchAniamator;
public class LaunchActiviity extends AppCompatActivity {
private ImageView iv_launch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
startMain();
}
//启动一个过渡动画(演示数据加载过程,下载过程)
//动画时长:1——3秒
//增加了新的需求下载数据,检测更新
//需求使用策略模式,策略模式的角色包括策略接口(ILaunch),具体的策略(LaunchAnimator),上下文
private void startMain(){
iv_launch = (ImageView) findViewById(R.id.iv_launch);
//实现方式一:策略模式
LaunchContext launchContext=new LaunchContext(new LaunchAniamator(),iv_launch);
launchContext.launch(new ILaunch.Callback() {
@Override
public void call() {
startActivity(new Intent(LaunchActiviity.this,MainActivity.class));
}
});
// ObjectAnimator alphaAnimator= ObjectAnimator.ofFloat(iv_launch,"alpha",0.0f,1.0f);
// //时间两秒钟
// alphaAnimator.setDuration(2000);
// alphaAnimator.start();
// alphaAnimator.addListener(new AnimatorListenerAdapter() {
// @Override
// public void onAnimationCancel(Animator animation) {
// super.onAnimationCancel(animation);
// }
//
// @Override
// public void onAnimationEnd(Animator animation) {
// super.onAnimationEnd(animation);
// startActivity(new Intent(LaunchActiviity.this,MainActivity.class));
// }
//
// @Override
// public void onAnimationRepeat(Animator animation) {
// super.onAnimationRepeat(animation);
// }
//
// @Override
// public void onAnimationStart(Animator animation) {
// super.onAnimationStart(animation);
// }
//
// @Override
// public void onAnimationPause(Animator animation) {
// super.onAnimationPause(animation);
// }
//
// @Override
// public void onAnimationResume(Animator animation) {
// super.onAnimationResume(animation);
// }
// });
}
}
补充:欢迎(引导页面)的实现
方案一:简单实现,过度动画
注意:图片jpg文件大小最好在150kb内;考虑安卓和ios各屏幕兼容问题,一般建议设计两种尺寸图片以匹配大部分机型:大图720*1280、小图480*800.(一般情况下:2-3套启动页图片即可)图片大小一定要限制(经可能控制在200KB以内,或者根据具体的公司要求决定)
方案二:后台运营
请求启动页接口(返回当前推广活动的时间范围)
启动页图片改变的(一般情况下,改变图片地址,更新图片内容不如更新图片地址)