国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)創(chuàng)意LoadingView動畫效果

2020-04-11 10:50:34
字體:
供稿:網(wǎng)友

Android上的熱火鍋煮蘿卜蔬菜的Loading動畫效果。 這是一個鍋煮蘿卜的Loading動畫,效果仿照自之前IOS上看到的一個效果,覺得挺有意思,就移植過來了,在此完成了Dialog的樣式,方便使用者作為LoadingView去使用。
關(guān)鍵性代碼:

package yellow5a5.demo.boilingloadingview.View; import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.drawable.ClipDrawable;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.View;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.ImageView;import android.widget.RelativeLayout; import java.util.Timer;import java.util.TimerTask; import yellow5a5.demo.boilingloadingview.R; /** * Created by Weiwu on 16/1/2. */public class BoilingPanView extends RelativeLayout {    private View mView;  private ClipDrawable mWaterDrawable;   private WaterView mWaterView;  private FlameView mFlameView;   private View mPea1;  private View mPea2;  private ImageView mPotato;  private ImageView mCarrot;  private ImageView mCoverView;   private Animation mLeftInAnim;  private Animation mRightInAnim;   private boolean isRightRotate = true;  private ValueAnimator mCoverAnim;   private BoilingAnimListener mBoilingAnimListener;   public interface BoilingAnimListener {    //初始動畫結(jié)束監(jiān)聽    void onFirstAnimEnd();  }   public void setBoilingAnimListener(BoilingAnimListener l) {    this.mBoilingAnimListener = l;  }   private Handler mHandle = new Handler(new Handler.Callback() {    @Override    public boolean handleMessage(Message msg) {      if (msg.what == 0X0000) {        mWaterDrawable.setLevel(mWaterDrawable.getLevel() + 800);      }      return false;    }  });   public BoilingPanView(Context context) {    this(context, null);  }   public BoilingPanView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }   public BoilingPanView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    mView = LayoutInflater.from(context).inflate(R.layout.boiling_pan, this, true);    initView();    initStartAnim();    initCoverAnim();  }   private void initView() {    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();  }   private void initStartAnim() {    mLeftInAnim = AnimationUtils.loadAnimation(getContext(), R.anim.left_in_anim);    mRightInAnim = AnimationUtils.loadAnimation(getContext(), R.anim.right_in_anim);  }   /*  抖動的蓋子   */  private void initCoverAnim() {    mCoverAnim = ValueAnimator.ofFloat(0f, 1f, 0f).setDuration(800);    mCoverAnim.setRepeatMode(Animation.REVERSE);    mCoverAnim.setRepeatCount(-1);    mCoverAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {      @Override      public void onAnimationUpdate(ValueAnimator animation) {        float value = (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(new AnimatorListenerAdapter() {      @Override      public void onAnimationRepeat(Animator animation) {        super.onAnimationRepeat(animation);        isRightRotate = !isRightRotate;      }    });  }   /*  開始啟動的動畫   */  public void beginFirstInAnim() {    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(new Animation.AnimationListener() {      @Override      public void onAnimationStart(Animation animation) {       }       @Override      public void onAnimationEnd(Animation animation) {        if (mBoilingAnimListener != null) {          //這里是為了給外部留有操作的空間          mBoilingAnimListener.onFirstAnimEnd();        } else {          beginBoilingAnim();        }      }       @Override      public void onAnimationRepeat(Animation animation) {       }    });  }   /*  開始加水燃火動畫   */  public void beginBoilingAnim() {    final Timer timer = new Timer();    timer.schedule(new TimerTask() {      @Override      public void run() {        mHandle.sendEmptyMessage(0X0000);        if (mWaterDrawable.getLevel() >= 10000) {          timer.cancel();        }      }    }, 0, 50);    mFlameView.startFlaming();    mCoverAnim.start();  }   /*  重置動畫   */  public void resetAnim() {    mWaterDrawable.setLevel(0);    mWaterView.resetBubbleAnim();    mFlameView.stopFlaming();    mPea1.setVisibility(INVISIBLE);    mPea2.setVisibility(INVISIBLE);    mPotato.setVisibility(INVISIBLE);    mCarrot.setVisibility(INVISIBLE);    mCoverView.setVisibility(INVISIBLE);   }}

希望本文所述對大家學(xué)習(xí)Android軟件編程有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 什邡市| 远安县| 青阳县| 阳朔县| 兴安县| 西藏| 巴林左旗| 茶陵县| 哈巴河县| 嘉鱼县| 宾阳县| 邵阳市| 湖北省| 文登市| 宁化县| 朝阳县| 镶黄旗| 永昌县| 封丘县| 长治市| 天等县| 扎鲁特旗| 南澳县| 大厂| 乐至县| 介休市| 高青县| 马边| 平罗县| 包头市| 乌审旗| 吐鲁番市| 高平市| 伊通| 山阳县| 洛隆县| 饶河县| 方城县| 什邡市| 高州市| 韶关市|