- 浏览: 260426 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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开发框架
本文及代码原创,转载请注明出处:http://maosidiaoxian.iteye.com/blog/1682616
许多程序在开启的时候都会有一个LOGO的展示,然后才进入。参考一个师兄的写法,我自己也对这样的行为进行了封装。代码如下:
使用时继承上面的类,主要重写里面的以下两个抽象方法:
1、nextActivity(),在这里返回下一个Activity。
2、setIntroResources(List<IntroImgResource> resources),在这里添加要展示的图片资源(包括展示时间)。这里仅支持图片,不支持动画、影片等。展示的效果是渐变显示。
如果有耗时的操作,重写runOnBackground()方法,它会在一个非UI线程中运行。
如果要进行横屏等的设置,重写runOnMainThread()方法,它在主线程中运行。设置横屏等行为,请使用代码中提供的方法。
以上代码来自我的开源项目cfuture-androidkit,目前托管在谷歌上,网址为:http://code.google.com/p/cfuture-androidkit/
许多程序在开启的时候都会有一个LOGO的展示,然后才进入。参考一个师兄的写法,我自己也对这样的行为进行了封装。代码如下:
/* * @(#)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.sinaapp.msdxblog.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 com.sinaapp.msdxblog.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 int BACKGROUND_FINISH = 0x01; /** * 前台任务完成的标志。 */ private static final int FRONTGROUND_FINISH = 0x10; /** * 表示要播放开场动画。 */ private static final int INTRO_PLAY = 0; /** * 开场动画的资源。 */ private List<IntroImgResource> mResources = new ArrayList<IntroImgResource>(); /** * 图片背景颜色。默认为白色。 */ 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() { 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.getNewHandlerInOtherThread("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.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 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); activity.get().mIntroImage.setImageResource(resource.mResId); activity.get().mIntroImage.startAnimation(animation); return; } if (msg.what == BACKGROUND_FINISH || msg.what == FRONTGROUND_FINISH) { isWaiting |= msg.what; // 当后台或前台的任务未完成时,不执行Activity的跳转。 if (isWaiting == (BACKGROUND_FINISH | FRONTGROUND_FINISH)) { activity.get().startActivity(new Intent(activity.get(), activity.get().nextActivity())); activity.get().finish(); return; } } }; }; /** * 开场动画的图片资源类。封装了图片、播放时间、开始时的透明程度。 * * @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; /** * 开场动画资源的构造方法。 * * @param mResId * 图片资源的ID。 * @param playerTime * 图片资源的播放时间,单位为毫秒。。 * @param startAlpha * 图片资源开始时的透明程度。0-255之间。 */ public IntroImgResource(int mResId, int playerTime, float startAlpha) { super(); this.mResId = mResId; this.playerTime = playerTime; this.startAlpha = startAlpha; } /** * 获取资源图片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; } } }
使用时继承上面的类,主要重写里面的以下两个抽象方法:
1、nextActivity(),在这里返回下一个Activity。
2、setIntroResources(List<IntroImgResource> resources),在这里添加要展示的图片资源(包括展示时间)。这里仅支持图片,不支持动画、影片等。展示的效果是渐变显示。
如果有耗时的操作,重写runOnBackground()方法,它会在一个非UI线程中运行。
如果要进行横屏等的设置,重写runOnMainThread()方法,它在主线程中运行。设置横屏等行为,请使用代码中提供的方法。
以上代码来自我的开源项目cfuture-androidkit,目前托管在谷歌上,网址为:http://code.google.com/p/cfuture-androidkit/
发表评论
-
利用电脑玩Android版“天天连萌”刷高分(四)——模拟按键及程序优化
2014-01-22 00:14 1711这一系列文章,没想到从去年10月份以来,写了三篇我就忘了写了, ... -
利用电脑玩Android版“天天连萌”刷高分(三)——连连看消除搜索
2013-10-29 17:02 1183差点忘了写接下来的这两篇博客了,这篇如果接不上上一篇,请勿见怪 ... -
利用电脑玩Android版“天天连萌”刷高分(二)——图像识别
2013-10-20 15:44 1540上一篇只是提到了在PC端利用android sdk里面的工具进 ... -
利用电脑玩Android版“天天连萌”刷高分(一)——截图
2013-10-20 11:22 3411这几周微信游戏“天天 ... -
在PC端进行android截屏的多种方法
2013-10-18 11:01 3596昨晚意外的发现在PC端进行截屏的方法相当多,在android ... -
近期计划
2013-09-01 20:02 1233在上一篇(http://maosidiao ... -
Android开源游戏引擎之Angle(二)——开始前的准备
2013-09-01 12:04 2508在上一篇博客(http://mao ... -
Android开源游戏引擎之Angle(一)——概述
2013-08-31 19:26 6045Angle是一个Android平台上 ... -
设置tabWidget标题的字体大小及颜色
2013-03-27 13:47 9461/* * @(#)TextAppearenceUtil ... -
桌面小部件AppWidget的使用
2013-02-23 13:49 1726在android平台中,显示在HOME界面的一些挂件,即桌面小 ... -
android使用actionbar与fragment
2013-01-16 23:12 2294android使用actionbar中的tab,及fragme ... -
android使用豆瓣API出现500错误及解决方法
2013-01-10 18:56 6291为团队做一个图书管理的应用,涉及到扫描ISBN然后查询图书信息 ... -
进入程序的动画IntroActivity增强版
2012-12-11 10:19 1474这是对上一次谈到的android程序进入前的动画的封装(详见: ... -
androidkit发布0.5.3alpha版
2012-12-07 09:26 1315androidkit是一个用于android应用层开发的工具包 ... -
使用Zxing及豆瓣API
2012-12-06 20:30 2399本文原创,转载请注明原文地址:http://maosidiao ... -
androidkit——减少android开发代码的工具包
2012-11-16 22:25 2227androidkit是我学android开发以来,慢慢在封装的 ... -
android开发知识点1——按钮效果
2012-10-30 15:15 2331android中控件的背景或ImageView、ImageBu ... -
android颜色选择器
2012-09-24 13:39 3379前段时间想到要封装一个颜色选择器的类,查询后知道谷歌api d ... -
androidt程序文字锯齿
2012-09-24 00:51 1286刚才才发现,在开发android程序时,如果在manifest ... -
大谈android安全2——Activity劫持的防范程序
2012-09-23 23:13 9416本文原创,转载请注明出处: http://maosidiaox ...
相关推荐
通过深入理解这个库,开发者能够轻松地为应用程序注入生动有趣的动画元素,提升用户体验。无论是简单的过渡效果还是复杂的交互设计,BaseAnimation1.3都能帮助开发者实现目标,让应用更具吸引力。在实践中,不断探索...
`Android-用于android中打开pdf文件`这个项目提供了一种解决方案,它基于开源的MuPDF-1.6版本,将其编译打包成Android可用的动态链接库(libmupdf.so),这样开发者就可以在自己的应用程序中集成PDF阅读功能。...
下面我们将深入探讨Android程序启动时缓冲界面的相关知识点。 1. **启动屏幕的作用**: - 提升用户体验:当应用程序正在初始化或加载资源时,启动屏幕可避免用户看到空白屏幕或长时间等待。 - 品牌展示:启动屏幕...
在IT行业中,用户体验是至关重要的,而动画效果作为提升用户交互体验的重要手段,常常被用于各种应用程序中。本文将深入探讨“仿微信开门动画”的实现,这是一个模仿微信启动时的引导UI和开门动画的设计,旨在带给...
总的来说,Android APP程序的引导页面设计和实现是一个融合了UI/UX设计、动画效果和编程技术的综合性任务。通过合理利用ViewPager和相关组件,开发者可以创建出既美观又实用的引导流程,提升应用的整体体验。
在本文中,我们将深入探讨如何将YOLOv8模型集成到Android端的Demo应用程序中,以便实现图像识别功能。YOLO(You Only Look Once)是一种实时目标检测系统,以其高效和准确性而闻名。YOLOv8是YOLO系列的最新版本,它...
在Android平台上开发天气预报应用程序是一项常见的任务,它涉及到多种技术和组件的综合运用。这个压缩包文件"ctWeather"很可能包含了实现这样一个程序的各种源代码、资源文件以及可能的库。下面,我们将深入探讨与...
`RotateAnimation`是Android提供的基础动画类,可以设置起始角度、结束角度和旋转方向;而`ObjectAnimator`则属于属性动画系统,能更流畅地控制动画过程。 为了实现平滑的旋转效果,开发者需要考虑到触摸事件的处理...
这个压缩包文件“Android源码——条码扫描程序源码.7z”包含了与Android平台上的条码扫描功能相关的源代码。条码扫描是移动应用中常见的一种功能,它允许用户通过手机摄像头读取和解析条形码或二维码,从而获取产品...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
在Android应用开发中,框架的选择和使用至关重要,它能够帮助开发者高效、规范地构建应用程序。...在实际开发过程中,合理地组织和封装代码,遵循最佳实践,将有助于创建稳定、高效且易于维护的Android应用程序。
【Android 仿Mac Dock】是Android平台上实现的一种模仿Mac电脑底部Dock栏效果的应用程序开发案例。Dock栏在Mac操作系统中是不可或缺的一部分,它提供了一种快速启动应用、切换任务和管理打开窗口的方式。在Android...
在移动应用开发中,用户首次打开应用时,为了提供更好的用户体验和展示应用特色,往往会设计一个登录前的动画界面,也称为引导页或欢迎页。本文将深入探讨如何使用ScrollView来实现这样的功能,以适用于各种应用程序...
此外,为了使代码更加模块化,可以考虑将动画逻辑封装到一个自定义TextView扩展类中,这样可以直接在XML布局文件中使用这个控件,简化代码。 总结,实现Android平台上的闪动文字效果,主要涉及自定义动画、属性动画...
在Android平台上,开发一个初级的记事本程序是学习Android应用程序开发的良好起点。这个程序涉及到的基本概念和技术包括用户界面设计、文件操作以及Android系统服务的使用。以下是对这些知识点的详细解释: 1. **...
`Android-Goldfinger`是一个开源库,旨在简化Android应用程序中指纹认证的集成过程,提供了一种更加便捷的方式来实现这一功能。本篇文章将深入探讨`Goldfinger`库的核心特性、使用方法以及它如何提升Android应用的...
9. **UI框架**:Android的用户界面由View和 ViewGroup构成,源码中详细解释了布局绘制、事件处理和动画实现的细节。 10. **测试框架**:Android提供了JUnit,Espresso等测试框架,用于编写和执行单元测试和UI测试。...
Android程序运行时权限是指应用程序请求访问敏感功能或数据的权限,如相机、联系人等。文件系统权限则是指应用程序对文件和目录的读写权限,它决定了应用程序能否访问特定的文件和目录。 #### 27. 指定浏览器访问...
1. Android Wi-Fi通信:Android系统提供了丰富的API来处理Wi-Fi连接,如WifiManager类,它允许开发者获取Wi-Fi状态、打开/关闭Wi-Fi、扫描可用网络并连接到指定的Wi-Fi热点。在本项目中,可能使用了这些API来建立...