Android实现创意LoadingView动画效果
Android上的热火锅煮萝卜蔬菜的Loading动画效果。这是一个锅煮萝卜的Loading动画,效果仿照自之前IOS上看到的一个效果,觉得挺有意思,就移植过来了,在此完成了Dialog的样式,方便使用者作为LoadingView去使用。
关键性代码:
packageyellow5a5.demo.boilingloadingview.View;
importandroid.animation.Animator;
importandroid.animation.AnimatorListenerAdapter;
importandroid.animation.ValueAnimator;
importandroid.content.Context;
importandroid.graphics.drawable.ClipDrawable;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.util.AttributeSet;
importandroid.util.TypedValue;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.animation.Animation;
importandroid.view.animation.AnimationUtils;
importandroid.widget.ImageView;
importandroid.widget.RelativeLayout;
importjava.util.Timer;
importjava.util.TimerTask;
importyellow5a5.demo.boilingloadingview.R;
/**
*CreatedbyWeiwuon16/1/2.
*/
publicclassBoilingPanViewextendsRelativeLayout{
privateViewmView;
privateClipDrawablemWaterDrawable;
privateWaterViewmWaterView;
privateFlameViewmFlameView;
privateViewmPea1;
privateViewmPea2;
privateImageViewmPotato;
privateImageViewmCarrot;
privateImageViewmCoverView;
privateAnimationmLeftInAnim;
privateAnimationmRightInAnim;
privatebooleanisRightRotate=true;
privateValueAnimatormCoverAnim;
privateBoilingAnimListenermBoilingAnimListener;
publicinterfaceBoilingAnimListener{
//初始动画结束监听
voidonFirstAnimEnd();
}
publicvoidsetBoilingAnimListener(BoilingAnimListenerl){
this.mBoilingAnimListener=l;
}
privateHandlermHandle=newHandler(newHandler.Callback(){
@Override
publicbooleanhandleMessage(Messagemsg){
if(msg.what==0X0000){
mWaterDrawable.setLevel(mWaterDrawable.getLevel()+800);
}
returnfalse;
}
});
publicBoilingPanView(Contextcontext){
this(context,null);
}
publicBoilingPanView(Contextcontext,AttributeSetattrs){
this(context,attrs,0);
}
publicBoilingPanView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
mView=LayoutInflater.from(context).inflate(R.layout.boiling_pan,this,true);
initView();
initStartAnim();
initCoverAnim();
}
privatevoidinitView(){
mWaterView=(WaterView)mView.findViewById(R.id.img_water);
mFlameView=(FlameView)mView.findViewById(R.id.flame);
mCoverView=(ImageView)mView.findViewById(R.id.img_cover);
mPea1=mView.findViewById(R.id.img_pea1);
mPea2=mView.findViewById(R.id.img_pea2);
mPotato=(ImageView)mView.findViewById(R.id.img_potato);
mCarrot=(ImageView)mView.findViewById(R.id.img_carrot);
mWaterDrawable=(ClipDrawable)mWaterView.getDrawable();
}
privatevoidinitStartAnim(){
mLeftInAnim=AnimationUtils.loadAnimation(getContext(),R.anim.left_in_anim);
mRightInAnim=AnimationUtils.loadAnimation(getContext(),R.anim.right_in_anim);
}
/*
抖动的盖子
*/
privatevoidinitCoverAnim(){
mCoverAnim=ValueAnimator.ofFloat(0f,1f,0f).setDuration(800);
mCoverAnim.setRepeatMode(Animation.REVERSE);
mCoverAnim.setRepeatCount(-1);
mCoverAnim.addUpdateListener(newValueAnimator.AnimatorUpdateListener(){
@Override
publicvoidonAnimationUpdate(ValueAnimatoranimation){
floatvalue=(float)animation.getAnimatedValue();
if(isRightRotate){
mCoverView.setRotation(value*5);
}else{
mCoverView.setRotation(-value*5);
}
mCoverView.setTranslationY(-value*TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,5,getResources().getDisplayMetrics()));
}
});
mCoverAnim.addListener(newAnimatorListenerAdapter(){
@Override
publicvoidonAnimationRepeat(Animatoranimation){
super.onAnimationRepeat(animation);
isRightRotate=!isRightRotate;
}
});
}
/*
开始启动的动画
*/
publicvoidbeginFirstInAnim(){
mPea1.setVisibility(VISIBLE);
mPea2.setVisibility(VISIBLE);
mPotato.setVisibility(VISIBLE);
mCarrot.setVisibility(VISIBLE);
mCoverView.setVisibility(VISIBLE);
mPea1.startAnimation(mLeftInAnim);
mPea2.startAnimation(mLeftInAnim);
mPotato.startAnimation(mLeftInAnim);
mCarrot.startAnimation(mRightInAnim);
mCoverView.startAnimation(mRightInAnim);
mRightInAnim.setAnimationListener(newAnimation.AnimationListener(){
@Override
publicvoidonAnimationStart(Animationanimation){
}
@Override
publicvoidonAnimationEnd(Animationanimation){
if(mBoilingAnimListener!=null){
//这里是为了给外部留有操作的空间
mBoilingAnimListener.onFirstAnimEnd();
}else{
beginBoilingAnim();
}
}
@Override
publicvoidonAnimationRepeat(Animationanimation){
}
});
}
/*
开始加水燃火动画
*/
publicvoidbeginBoilingAnim(){
finalTimertimer=newTimer();
timer.schedule(newTimerTask(){
@Override
publicvoidrun(){
mHandle.sendEmptyMessage(0X0000);
if(mWaterDrawable.getLevel()>=10000){
timer.cancel();
}
}
},0,50);
mFlameView.startFlaming();
mCoverAnim.start();
}
/*
重置动画
*/
publicvoidresetAnim(){
mWaterDrawable.setLevel(0);
mWaterView.resetBubbleAnim();
mFlameView.stopFlaming();
mPea1.setVisibility(INVISIBLE);
mPea2.setVisibility(INVISIBLE);
mPotato.setVisibility(INVISIBLE);
mCarrot.setVisibility(INVISIBLE);
mCoverView.setVisibility(INVISIBLE);
}
}
希望本文所述对大家学习Android软件编程有所帮助。