本文所述实例为在android中开起开场动画类,已封装好,进行android开发的朋友可使用。在这个类中,你可以:设置开场动画的图片资源、返回下一个要启动的Activity、显示开场动画、执行耗时的操作、创建启动时的界面Layout、设置屏幕的方向。默认是竖屏、开场动画的图片资源类。封装了图片、播放时间、开始时的透明程度等。

具体实现代码如下:

package com.lurencun.cfuture09.androidkit.ui;

import java.io.Serializable;

import java.lang.ref.WeakReference;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.view.Window;

import android.view.WindowManager;

import android.view.animation.AlphaAnimation;

import android.widget.FrameLayout;

import android.widget.ImageView;

import android.widget.ImageView.ScaleType;

import com.lurencun.cfuture09.androidkit.thread.HandlerFactory;

public abstract class IntroActivity extends Activity {

private static final String FLAG_RESOURCE = "FLAG_RESOURCE";

/**

* 后台任务完成的标志。

*/

private static final byte BACKGROUND_FINISH = 0x01;

/**

* 前台任务完成的标志。

*/

private static final byte FRONTGROUND_FINISH = 0x10;

/**

* 表示要播放开场动画。

*/

private static final int INTRO_PLAY = 0;

/**

* 开场动画的资源。

*/

private List mResources;

/**

* 图片背景颜色。默认为白色。

*/

private int mBackgroundColor = 0xFFFFFFFF;

/**

* UI线程。

*/

private Handler mUiHandler;

/**

* 用来显示动画。

*/

private ImageView mIntroImage;

/**

* 屏幕方向。

*/

private int mOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

init();

runOnMainThread();

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

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

WindowManager.LayoutParams.FLAG_FULLSCREEN);

this.setRequestedOrientation(mOrientation);

this.setContentView(createLayout());

setIntroResources(mResources);

startOnBackground();

showIntro();

}

private void init() {

mResources = new ArrayList();

mUiHandler = new UIHandler(this);

}

/**

* 设置开场动画的图片资源。

*

* @param resources

* 开场动画的图片资源。

*/

protected abstract void setIntroResources(List resources);

/**

* 返回下一个要启动的Activity。

*

* @return 下一个要启动的Activity。

*/

protected abstract Class> nextActivity();

/**

* 显示开场动画。

*/

protected void showIntro() {

int delayTime = 0;

for (final IntroImgResource resource : mResources) {

Message msg = new Message();

msg.what = INTRO_PLAY;

Bundle data = new Bundle();

data.putSerializable(FLAG_RESOURCE, resource);

msg.setData(data);

mUiHandler.sendMessageDelayed(msg, delayTime);

delayTime += resource.playerTime;

}

mUiHandler.sendEmptyMessageDelayed(FRONTGROUND_FINISH, delayTime);

}

/**

* 执行耗时的操作。

*/

private void startOnBackground() {

HandlerFactory.newHandlerInOtherThread("intro_bg").post(

new Runnable() {

@Override

public void run() {

runOnBackground();

mUiHandler.sendEmptyMessage(0x1);

}

});

}

/**

* 创建启动时的界面Layout。

*

* @return 返回创建的界面Layout.

*/

private View createLayout() {

FrameLayout layout = new FrameLayout(this);

ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(

LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

layout.setLayoutParams(layoutParams);

layout.setBackgroundColor(getBackgroundColor());

mIntroImage = new ImageView(this);

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(

FrameLayout.LayoutParams.FILL_PARENT,

FrameLayout.LayoutParams.FILL_PARENT);

params.gravity = Gravity.CENTER;

layout.addView(mIntroImage, params);

return layout;

}

/**

* 获取图片背景。

*

* @return

*/

public int getBackgroundColor() {

return mBackgroundColor;

}

/**

* 设置图片背景。

*

* @param backgroundColor

*/

public void setBackgroundColor(int backgroundColor) {

this.mBackgroundColor = backgroundColor;

}

/**

* 返回屏幕方向。

*

* @return

*/

public int getmOrientation() {

return mOrientation;

}

/**

* 设置屏幕的方向。默认是竖屏。

*

* @param mOrientation

* 屏幕方向。ActivityInfo.SCREEN_ORIENTATION_PORTRAIT或者是ActivityInfo.

* SCREEN_ORIENTATION_LANDSCAPE。

*/

public void setmOrientation(int mOrientation) {

this.mOrientation = mOrientation;

}

/**

* 在前台中执行的代码。如需对界面进行横屏的重新设置,请此在执行setmOrientation()方法。

*/

protected void runOnMainThread() {

}

/**

* 在后台中执行的代码。在此进行比较耗时的操作。

*/

protected void runOnBackground() {

}

protected static class UIHandler extends Handler {

/**

* 是否需要等待。

*/

private int isWaiting = 0;

private WeakReference activity;

public UIHandler(IntroActivity activity) {

this.activity = new WeakReference(activity);

}

public void handleMessage(android.os.Message msg) {

if (msg.what == INTRO_PLAY) {

IntroImgResource resource = (IntroImgResource) msg.getData()

.getSerializable(FLAG_RESOURCE);

AlphaAnimation animation = new AlphaAnimation(

resource.startAlpha, 1f);

animation.setDuration(resource.playerTime);

IntroActivity intro = activity.get();

if (intro != null) {

if (resource.isExpand) {

intro.mIntroImage.setScaleType(ScaleType.FIT_XY);

} else {

intro.mIntroImage.setScaleType(ScaleType.CENTER);

}

intro.mIntroImage.setImageResource(resource.mResId);

intro.mIntroImage.startAnimation(animation);

}

return;

}

if (msg.what == BACKGROUND_FINISH || msg.what == FRONTGROUND_FINISH) {

isWaiting |= msg.what;

// 当后台或前台的任务未完成时,不执行Activity的跳转。

if (isWaiting == (BACKGROUND_FINISH | FRONTGROUND_FINISH)) {

IntroActivity intro = activity.get();

if (intro != null) {

intro.startActivity(new Intent(intro, intro

.nextActivity()));

intro.finish();

}

}

}

};

};

/**

* 开场动画的图片资源类。封装了图片、播放时间、开始时的透明程度。

*

* @author msdx

*

*/

protected class IntroImgResource implements Serializable {

/**

* 序列化ID。

*/

private static final long serialVersionUID = -2257252088641281804L;

/**

* 资源图片ID.

*/

private int mResId;

/**

* 播放时间,单位为毫秒。

*/

private int playerTime;

/**

* 开始时的透明程度。0-1之间。

*/

private float startAlpha;

/**

* 图片是否扩展。

*/

private boolean isExpand;

/**

* 开场动画资源的构造方法。

*

* @param mResId

* 图片资源的ID。

* @param playerTime

* 图片资源的播放时间,单位为毫秒。。

* @param startAlpha

* 图片资源开始时的透明程度。0-255之间。

*/

public IntroImgResource(int mResId, int playerTime, float startAlpha, boolean isExpand) {

super();

this.mResId = mResId;

this.playerTime = playerTime;

this.startAlpha = startAlpha;

this.isExpand = isExpand;

}

/**

* 获取资源图片ID。

*

* @return 资源图片ID。

*/

public int getmResId() {

return mResId;

}

/**

* 设置资源图片ID.

*

* @param mResId

* 要设置的资源图片ID.

*/

public void setmResId(int mResId) {

this.mResId = mResId;

}

/**

* 返回资源图片的播放时间。

*

* @return 资源图片的播放时间。

*/

public int getPlayerTime() {

return playerTime;

}

/**

* 设置资源图片的播放时间。

*

* @param playerTime

* 资源图片的播放时间。

*/

public void setPlayerTime(int playerTime) {

this.playerTime = playerTime;

}

/**

* 得到资源开始时的透明程度。

*

* @return

*/

public float getStartAlpha() {

return startAlpha;

}

/**

* 设置资源开始时的透明程度。

*

* @param startAlpha

*/

public void setStartAlpha(float startAlpha) {

this.startAlpha = startAlpha;

}

/**

* 返回图片是否设置扩展。

*

* @return

*/

public boolean isExpand() {

return isExpand;

}

/**

* 设置图片是否扩展。

*

* @param isExpand

* 如果为true,则图片会被拉伸至全屏幕大小进行展示,否则按原大小展示。

*/

public void setExpand(boolean isExpand) {

this.isExpand = isExpand;

}

}

}

本实例配备了详细的注释说明,读者可以在了解程序代码功能的基础上进行个性化的修改,打造出自己独具个性的Android开场动画!

android动画封装,Android开场动画类完整实现代码相关推荐

  1. phppage类封装分页功能_php封装的page分页类完整实例代码

    效果图 1.测试实例test.php header("Content-Type: text/html; charset=utf-8"); date_default_timezone ...

  2. android做开场动画,Android_Android开场动画类完整实现代码,本文所述实例为在android中开起 - phpStudy...

    Android开场动画类完整实现代码 本文所述实例为在android中开起开场动画类,已封装好,进行android开发的朋友可使用.在这个类中,你可以:设置开场动画的图片资源.返回下一个要启动的Act ...

  3. android动画封装,Android属性动画封装,快速构建动画

    Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...

  4. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

  5. android 多线程封装,Android线程池封装库

    目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...

  6. android vitamio封装,Android视频框架Vitamio构建自己的通用播放器

    Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...

  7. html中做开场动画,实例CSS3开场动画的制作与优化_html/css_WEB-ITnose

    素材: 期望效果: http://v.youku.com/v_show/id_XMjY2NTc1MzYw.html 一开始需要制作这个动画的时候,其实我是拒绝的,因为单凭这几个素材,即便我对动画了如指 ...

  8. android 九宫格封装,Android 九宫格的实现方法

    1.xml代码: android:orientation="vertical" android:layout_width="fill_parent" andro ...

  9. android 九宫格封装,Android 九宫格布局

    演示 image 需求 满足0-9个图的适配 图数量 演示 1 image 2 image 3 image 4 image 5 image 6 image 7 image 8 image 9 imag ...

最新文章

  1. php判断日期为空值,php判断值是否为空实例代码
  2. 201521123060 《Java程序设计》第10周学习总结
  3. u盘安装linux双系统6,用U盘安装Centos6.5 + Win7 双系统
  4. 使用VSCode写Python代码的推荐安装的插件
  5. 电脑无法识别u盘怎么办_电脑无法识别U盘?5步操作让办公族轻松搞定!
  6. 5G毫米波通信中一些量化的概念
  7. java特殊字符转义字符_Java正则表达式处理特殊字符转义的方法
  8. xml转化为Dictionary
  9. java 大型互联网架构_分享一些大型互联网架构常用的高端技术
  10. Linux Repositories 2
  11. Android开发笔记(一百一十)使用http框架上传文件
  12. mysql中的预留字段_数据库设计误区:备用字段 / 保留字段 / 预留字段
  13. kmeans算法python代码_kmeans算法用Python怎么实现
  14. 实现点击图标使界面回到顶部
  15. VsCode经典实用常用插件分享
  16. svn主从备份以及开机启动脚本
  17. 【统计建模与R软件】第二章 R软件的使用 课本课后习题 答案 解析 代码
  18. Node-RED教程(一):Node-RED的介绍与安装
  19. LeetCode(String) 2325. Decode the Message
  20. 计算机毕业设计每章小结怎么写?

热门文章

  1. 我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
  2. 微信小程序之短信验证码
  3. android广告轮播无限
  4. 【饮食的迷思--人类必看的真正的饮食长寿指南--来自英国国王学院顶级遗传性流行病教授】---智人必须会的生活技能 by Tim Spector--饮食的迷思
  5. 15k的php会什么,【后端开辟】15k的php须要控制什么手艺
  6. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
  7. 读取pb模型进行预测
  8. 喜马拉雅随车听开通啦
  9. 【金猿案例展】上海市儿童基金会——管理会计云平台建设
  10. [SPI+DMA] 驱动WS2812B显示时钟