Android开场动画类完整实现代码
本文所述实例为在android中开起开场动画类,已封装好,进行android开发的朋友可使用。在这个类中,你可以:设置开场动画的图片资源、返回下一个要启动的Activity、显示开场动画、执行耗时的操作、创建启动时的界面Layout、设置屏幕的方向。默认是竖屏、开场动画的图片资源类。封装了图片、播放时间、开始时的透明程度等。
具体实现代码如下:
packagecom.lurencun.cfuture09.androidkit.ui; importjava.io.Serializable; importjava.lang.ref.WeakReference; importjava.util.ArrayList; importjava.util.List; importandroid.app.Activity; importandroid.content.Intent; importandroid.content.pm.ActivityInfo; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.view.Gravity; importandroid.view.View; importandroid.view.ViewGroup; importandroid.view.ViewGroup.LayoutParams; importandroid.view.Window; importandroid.view.WindowManager; importandroid.view.animation.AlphaAnimation; importandroid.widget.FrameLayout; importandroid.widget.ImageView; importandroid.widget.ImageView.ScaleType; importcom.lurencun.cfuture09.androidkit.thread.HandlerFactory; publicabstractclassIntroActivityextendsActivity{ privatestaticfinalStringFLAG_RESOURCE="FLAG_RESOURCE"; /** *后台任务完成的标志。 */ privatestaticfinalbyteBACKGROUND_FINISH=0x01; /** *前台任务完成的标志。 */ privatestaticfinalbyteFRONTGROUND_FINISH=0x10; /** *表示要播放开场动画。 */ privatestaticfinalintINTRO_PLAY=0; /** *开场动画的资源。 */ privateList<IntroImgResource>mResources; /** *图片背景颜色。默认为白色。 */ privateintmBackgroundColor=0xFFFFFFFF; /** *UI线程。 */ privateHandlermUiHandler; /** *用来显示动画。 */ privateImageViewmIntroImage; /** *屏幕方向。 */ privateintmOrientation=ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; @Override protectedvoidonCreate(BundlesavedInstanceState){ 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(); } privatevoidinit(){ mResources=newArrayList<IntroImgResource>(); mUiHandler=newUIHandler(this); } /** *设置开场动画的图片资源。 * *@paramresources *开场动画的图片资源。 */ protectedabstractvoidsetIntroResources(List<IntroImgResource>resources); /** *返回下一个要启动的Activity。 * *@return下一个要启动的Activity。 */ protectedabstractClass<?>nextActivity(); /** *显示开场动画。 */ protectedvoidshowIntro(){ intdelayTime=0; for(finalIntroImgResourceresource:mResources){ Messagemsg=newMessage(); msg.what=INTRO_PLAY; Bundledata=newBundle(); data.putSerializable(FLAG_RESOURCE,resource); msg.setData(data); mUiHandler.sendMessageDelayed(msg,delayTime); delayTime+=resource.playerTime; } mUiHandler.sendEmptyMessageDelayed(FRONTGROUND_FINISH,delayTime); } /** *执行耗时的操作。 */ privatevoidstartOnBackground(){ HandlerFactory.newHandlerInOtherThread("intro_bg").post( newRunnable(){ @Override publicvoidrun(){ runOnBackground(); mUiHandler.sendEmptyMessage(0x1); } }); } /** *创建启动时的界面Layout。 * *@return返回创建的界面Layout. */ privateViewcreateLayout(){ FrameLayoutlayout=newFrameLayout(this); ViewGroup.LayoutParamslayoutParams=newViewGroup.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); layout.setLayoutParams(layoutParams); layout.setBackgroundColor(getBackgroundColor()); mIntroImage=newImageView(this); FrameLayout.LayoutParamsparams=newFrameLayout.LayoutParams( FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT); params.gravity=Gravity.CENTER; layout.addView(mIntroImage,params); returnlayout; } /** *获取图片背景。 * *@return */ publicintgetBackgroundColor(){ returnmBackgroundColor; } /** *设置图片背景。 * *@parambackgroundColor */ publicvoidsetBackgroundColor(intbackgroundColor){ this.mBackgroundColor=backgroundColor; } /** *返回屏幕方向。 * *@return */ publicintgetmOrientation(){ returnmOrientation; } /** *设置屏幕的方向。默认是竖屏。 * *@parammOrientation *屏幕方向。ActivityInfo.SCREEN_ORIENTATION_PORTRAIT或者是ActivityInfo. *SCREEN_ORIENTATION_LANDSCAPE。 */ publicvoidsetmOrientation(intmOrientation){ this.mOrientation=mOrientation; } /** *在前台中执行的代码。如需对界面进行横屏的重新设置,请此在执行setmOrientation()方法。 */ protectedvoidrunOnMainThread(){ } /** *在后台中执行的代码。在此进行比较耗时的操作。 */ protectedvoidrunOnBackground(){ } protectedstaticclassUIHandlerextendsHandler{ /** *是否需要等待。 */ privateintisWaiting=0; privateWeakReference<IntroActivity>activity; publicUIHandler(IntroActivityactivity){ this.activity=newWeakReference<IntroActivity>(activity); } publicvoidhandleMessage(android.os.Messagemsg){ if(msg.what==INTRO_PLAY){ IntroImgResourceresource=(IntroImgResource)msg.getData() .getSerializable(FLAG_RESOURCE); AlphaAnimationanimation=newAlphaAnimation( resource.startAlpha,1f); animation.setDuration(resource.playerTime); IntroActivityintro=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)){ IntroActivityintro=activity.get(); if(intro!=null){ intro.startActivity(newIntent(intro,intro .nextActivity())); intro.finish(); } } } }; }; /** *开场动画的图片资源类。封装了图片、播放时间、开始时的透明程度。 * *@authormsdx * */ protectedclassIntroImgResourceimplementsSerializable{ /** *序列化ID。 */ privatestaticfinallongserialVersionUID=-2257252088641281804L; /** *资源图片ID. */ privateintmResId; /** *播放时间,单位为毫秒。 */ privateintplayerTime; /** *开始时的透明程度。0-1之间。 */ privatefloatstartAlpha; /** *图片是否扩展。 */ privatebooleanisExpand; /** *开场动画资源的构造方法。 * *@parammResId *图片资源的ID。 *@paramplayerTime *图片资源的播放时间,单位为毫秒。。 *@paramstartAlpha *图片资源开始时的透明程度。0-255之间。 */ publicIntroImgResource(intmResId,intplayerTime,floatstartAlpha,booleanisExpand){ super(); this.mResId=mResId; this.playerTime=playerTime; this.startAlpha=startAlpha; this.isExpand=isExpand; } /** *获取资源图片ID。 * *@return资源图片ID。 */ publicintgetmResId(){ returnmResId; } /** *设置资源图片ID. * *@parammResId *要设置的资源图片ID. */ publicvoidsetmResId(intmResId){ this.mResId=mResId; } /** *返回资源图片的播放时间。 * *@return资源图片的播放时间。 */ publicintgetPlayerTime(){ returnplayerTime; } /** *设置资源图片的播放时间。 * *@paramplayerTime *资源图片的播放时间。 */ publicvoidsetPlayerTime(intplayerTime){ this.playerTime=playerTime; } /** *得到资源开始时的透明程度。 * *@return */ publicfloatgetStartAlpha(){ returnstartAlpha; } /** *设置资源开始时的透明程度。 * *@paramstartAlpha */ publicvoidsetStartAlpha(floatstartAlpha){ this.startAlpha=startAlpha; } /** *返回图片是否设置扩展。 * *@return */ publicbooleanisExpand(){ returnisExpand; } /** *设置图片是否扩展。 * *@paramisExpand *如果为true,则图片会被拉伸至全屏幕大小进行展示,否则按原大小展示。 */ publicvoidsetExpand(booleanisExpand){ this.isExpand=isExpand; } } }
本实例配备了详细的注释说明,读者可以在了解程序代码功能的基础上进行个性化的修改,打造出自己独具个性的Android开场动画!