- 浏览: 260089 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
sunshine_bean:
第四行改进下URL=`svn info |grep &quo ...
linux判断是否需要svn up的脚本 -
leokelly001:
设置请求头,user-agent就行了
android使用豆瓣API出现500错误及解决方法 -
貌似掉线:
txy7121 写道HandlerFactory和AntiCo ...
大谈android安全2——Activity劫持的防范程序 -
txy7121:
HandlerFactory和AntiConstants这两个 ...
大谈android安全2——Activity劫持的防范程序 -
貌似掉线:
hyc_willie 写道关注着你的框架,希望能见到它的发布 ...
androidkit——Android开发框架
这是对上一次谈到的android程序进入前的动画的封装(详见:http://maosidiaoxian.iteye.com/blog/1682616)的增加版。
在上一个版本中,如果图片太小,只是在中间显示,而无法占满整个屏幕。而在QQ,网易新闻的客户端中,它们的图片都是占满整个屏幕的,所以我又修改了一下,使得可以选择是否让图片填充整个屏幕。
使用的代码如下:
改进后的IntroActivity源代码如下:
在上一个版本中,如果图片太小,只是在中间显示,而无法占满整个屏幕。而在QQ,网易新闻的客户端中,它们的图片都是占满整个屏幕的,所以我又修改了一下,使得可以选择是否让图片填充整个屏幕。
使用的代码如下:
/* * @(#)IntroActivitySample.java Project:com.sinaapp.msdxblog.andoridkit.sample * Date:2012-9-12 * * Copyright (c) 2011 CFuture09, Institute of Software, * Guangdong Ocean University, Zhanjiang, GuangDong, China. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sinaapp.msdxblog.androidkit.sample.ui; import java.util.List; import com.lurencun.cfuture09.androidkit.ui.IntroActivity; import com.sinaapp.msdxblog.androidkit.sample.GameActivity; import com.sinaapp.msdxblog.androidkit.sample.R; /** * @author Geek_Soledad (66704238@51uc.com) */ public class IntroActivitySample extends IntroActivity{ @Override protected Class<?> nextActivity() { return GameActivity.class; } @Override protected void setIntroResources(List<IntroImgResource> arg0) { IntroImgResource resource = new IntroImgResource(R.drawable.nav1, 2000, 0.4f, true); arg0.add(resource); IntroImgResource resource2 = new IntroImgResource(R.drawable.nav2, 2500, 0.4f, false); arg0.add(resource2); } @Override protected void runOnBackground() { // do the loading here } }在IntroImgResource的构造方法中,增加了一个boolean参数,表示是否让图片填充整个屏幕。在上面的例子中,第一张图片会填充整个屏幕,而第二张图片只是居中显示。
改进后的IntroActivity源代码如下:
/* * @(#)IntroActivity.java Project:com.sinaapp.msdxblog.androidkit * Date:2012-9-10 * * Copyright (c) 2011 CFuture09, Institute of Software, * Guangdong Ocean University, Zhanjiang, GuangDong, China. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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; /** * @author Geek_Soledad (66704238@51uc.com) */ 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<IntroImgResource> 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<IntroImgResource>(); mUiHandler = new UIHandler(this); } /** * 设置开场动画的图片资源。 * * @param resources * 开场动画的图片资源。 */ protected abstract void setIntroResources(List<IntroImgResource> 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<IntroActivity> activity; public UIHandler(IntroActivity activity) { this.activity = new WeakReference<IntroActivity>(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版“天天连萌”刷高分(四)——模拟按键及程序优化
2014-01-22 00:14 1707这一系列文章,没想到从去年10月份以来,写了三篇我就忘了写了, ... -
利用电脑玩Android版“天天连萌”刷高分(三)——连连看消除搜索
2013-10-29 17:02 1181差点忘了写接下来的这两篇博客了,这篇如果接不上上一篇,请勿见怪 ... -
利用电脑玩Android版“天天连萌”刷高分(二)——图像识别
2013-10-20 15:44 1536上一篇只是提到了在PC端利用android sdk里面的工具进 ... -
利用电脑玩Android版“天天连萌”刷高分(一)——截图
2013-10-20 11:22 3408这几周微信游戏“天天 ... -
在PC端进行android截屏的多种方法
2013-10-18 11:01 3593昨晚意外的发现在PC端进行截屏的方法相当多,在android ... -
近期计划
2013-09-01 20:02 1228在上一篇(http://maosidiao ... -
Android开源游戏引擎之Angle(二)——开始前的准备
2013-09-01 12:04 2506在上一篇博客(http://mao ... -
Android开源游戏引擎之Angle(一)——概述
2013-08-31 19:26 6032Angle是一个Android平台上 ... -
设置tabWidget标题的字体大小及颜色
2013-03-27 13:47 9456/* * @(#)TextAppearenceUtil ... -
桌面小部件AppWidget的使用
2013-02-23 13:49 1721在android平台中,显示在HOME界面的一些挂件,即桌面小 ... -
android使用actionbar与fragment
2013-01-16 23:12 2292android使用actionbar中的tab,及fragme ... -
android使用豆瓣API出现500错误及解决方法
2013-01-10 18:56 6282为团队做一个图书管理的应用,涉及到扫描ISBN然后查询图书信息 ... -
androidkit发布0.5.3alpha版
2012-12-07 09:26 1304androidkit是一个用于android应用层开发的工具包 ... -
使用Zxing及豆瓣API
2012-12-06 20:30 2396本文原创,转载请注明原文地址:http://maosidiao ... -
androidkit——减少android开发代码的工具包
2012-11-16 22:25 2221androidkit是我学android开发以来,慢慢在封装的 ... -
android开发知识点1——按钮效果
2012-10-30 15:15 2328android中控件的背景或ImageView、ImageBu ... -
android颜色选择器
2012-09-24 13:39 3369前段时间想到要封装一个颜色选择器的类,查询后知道谷歌api d ... -
androidt程序文字锯齿
2012-09-24 00:51 1284刚才才发现,在开发android程序时,如果在manifest ... -
大谈android安全2——Activity劫持的防范程序
2012-09-23 23:13 9407本文原创,转载请注明出处: http://maosidiaox ... -
android程序开启动画封装
2012-09-20 22:24 5752本文及代码原创,转载请注明出处:http://maosidia ...
相关推荐
微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画滚动 (源码)微信小程序 全屏动画...
Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果Java SE程序 动画效果...
微信小程序帧动画源码程序详解 在移动应用开发领域,微信小程序因其轻量级、无需安装的特点,成为了许多开发者和企业青睐的平台。帧动画是一种常见的动态效果展示方式,尤其适用于游戏、图标动效或者过渡效果。本篇...
在C# WinForm应用开发中,为程序添加启动动画可以提升用户体验,使用户在等待程序加载时有一种视觉上的反馈,从而感觉程序启动更快。本文将详细介绍如何在C# WinForm项目中实现一个漂亮的启动动画。 首先,我们需要...
小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小程序源代码小动画代码 小...
真正的微信小程序动画折叠面板,css动画实现 真正的微信小程序动画折叠面板,css动画实现 真正的微信小程序动画折叠面板,css动画实现 真正的微信小程序动画折叠面板,css动画实现
微信小程序开发之录音机 音频播放 动画 (真机可用)(源代码+截图)微信小程序开发之录音机 音频播放 动画 (真机可用)(源代码+截图)微信小程序开发之录音机 音频播放 动画 (真机可用)(源代码+截图)微信小程序开发之录音...
在微信小程序中,加载和完成动画是提升用户体验的重要组成部分。加载动画可以缓解用户在等待内容加载时的不耐烦感,而完成动画则可以给用户一个明确的反馈,表明某个操作已经成功执行。本资源“微信小程序-加载及...
在小程序开发中,实现“收起展开动画效果”是一个常见的需求,这通常涉及到用户界面(UI)的交互性和用户体验(UX)的优化。这个效果在菜单、侧滑抽屉、折叠面板等组件中广泛运用,使得用户能以平滑、自然的方式探索...
标题中的“微信小程序animatecss插件界面切换动画”指的是将Animate.css这个库应用到微信小程序中,用于控制页面间的过渡动画。Animate.css包含了多种预设的动画效果,如淡入淡出、滑动、旋转等,开发者可以根据自己...
微信小程序和H5技术在现代数字媒体中广泛应用,其中一种吸引用户注意力的创新设计就是“翻书动画效果”。这种效果可以模拟真实的书籍翻页过程,为用户带来更沉浸式的阅读体验。本文将深入探讨如何在微信小程序和H5中...
本教程主要讲解了几个关键概念,包括动画融合、动画层、动画混合、附加动画、程序动画以及动画重放和取样。 首先,**动画融合**(Animation Blending)是确保游戏动画流畅过渡的关键技术。动画师通常会制作如行走、...
这类小程序通过动态视觉效果增强了直播的互动性和趣味性,让观众可以通过点击按钮触发各种酷炫的点赞动画,提升直播体验。下面我们将深入探讨与这个主题相关的多个IT知识点。 1. **微信小程序开发**: 微信小程序...
各种数据的动画操作,如链表,二叉树的动画各种数据的动画操作,如链表,二叉树的动画各种数据的动画操作,如链表,二叉树的动画各种数据的动画操作,如链表,二叉树的动画各种数据的动画操作,如链表,二叉树的动画...
在微信小程序开发中,为了提升用户体验,经常需要添加各种交互效果,其中“飞入购物车”的动画效果是一种常见的设计,可以使得用户在将商品添加到购物车时有更直观、生动的感受。本教程将详细讲解如何在小程序中实现...
在微信小程序开发中,创建吸引用户的交互体验是至关重要的,其中加载动画就是一种常见的提升用户体验的方式。本资源包“微信小程序-渐变发光加载动画.zip”聚焦于如何在微信小程序中实现这种动态效果,旨在帮助...
在微信小程序开发中,制作音乐跳动动画是一项有趣且实用的技术。这个样例源码提供了一个实际项目的实现,它涉及到音频处理、服务器交互以及客户端动画的创建。下面将详细讲解这些知识点。 首先,我们要理解微信小...
WPF界面动画的进入和退出效果就是这样的一个关键点,它可以让应用看起来更加专业且吸引人。本文将深入探讨如何在Wpf中实现界面的进入和退出动画效果。 **一、动画基础** WPF的动画系统基于Timeline类,它允许...
在C语言中创建动画程序是一项挑战性的任务,但通过熟练运用特定的库和函数,可以实现生动有趣的视觉效果。这个“c语言动画程序”实例很可能包含了一系列用于绘制和更新图形的代码,使得图像能够在屏幕上动态地变化,...