Android 自定义View 模仿豆瓣App加载中Loading(也类似支付宝AppLoading)

上面是实现效果gif,下面是豆瓣App的gif录制图示::
这里写图片描述

思路(其中一种):
1、一个停止的笑脸
2、笑脸从左侧脸颊开始旋转,吸收眼睛,同时弧线变长
3、然后转圈
4、转到横向时释放眼睛,然后旋转回正
然后 动作往复循环

github :https://github.com/louisgeek/LouisDoubanLoadingView
具体见完整代码:

package com.louisgeek.louiscustomviewstudy;

import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;

import static android.content.ContentValues.TAG;

/**
 * 支付宝的稍微和豆瓣有点区别,下面是仿豆瓣App加载中loading,支付宝自行调整下即可。
 * Created by louisgeek on 2016/10/24.
 */

public class LikeDouBan_AlipaySmileLoadingView extends View {
   
    private final int STATE_STOP = 0;
    private final int STATE_START_LOAD = 1;
    private final int STATE_LOADING = 2;
    private final int STATE_END_LOADING = 3;
    private final int STATE_TURN_SMILE = 4;
    private int mCurrenState = STATE_STOP;
    private Paint mPaint;
    private int mScreenWidth, mScreenHeight, mViewWidth, mViewHeight;
    private ValueAnimator mValueAnimatorStartLoad;
    private ValueAnimator mValueAnimatorLoading;
    private ValueAnimator mValueAnimatorTurnSmile;
    private ValueAnimator mValueAnimatorEndLoading;

    private ValueAnimator mValueAnimatorHoldSimle;

    private float mLoadingProgress;
    private float mStartLoadProgress;
    private float mTurnSmileProgress;
    private float mEndLoadingProgress;

    private float mHoldSimleProgress;
    private float mRaidus = this.dp2px(30);
    private int mCircleFrameHeight = this.dp2px(10);
    private int flagLoadingCount;
    private int flagHoldSmileCount;
    private boolean mStopLoading=true;

    private int START_END_DURATION=800;
    private ValueAnimator.AnimatorListener mAnimatorListener;

    public LikeDouBan_AlipaySmileLoadingView(Context context) {
        this(context, null);
    }

    public LikeDouBan_AlipaySmileLoadingView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public LikeDouBan_AlipaySmileLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint();
        mPaint.setStrokeWidth(mCircleFrameHeight);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.parseColor("#2d832e"));
        mPaint.setStrokeCap(Paint.Cap.ROUND);


        mAnimatorListener = new Animator.AnimatorListener() {
            @Override
            public<
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值