package com.daya.accompanysdk.widget; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.LinearLayout; import com.airbnb.lottie.LottieAnimationView; import com.cooleshow.base.utils.SizeUtils; import com.cooleshow.base.utils.helper.QMUIDeviceHelper; import com.daya.accompanysdk.R; import com.daya.orchestra.accompany.widget.BaseDelayCheckView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; /** * Author by pq, Date on 2024/10/14. */ public class CustomDelayCheckView extends BaseDelayCheckView { private ImageView mIvBack; private View mViewRetry; private LottieAnimationView mViewAnim1; private LottieAnimationView mViewAnim2; private ImageView mIvBall; private ImageView mIvCenter; private ImageView mIvTip; private LinearLayout mLlEarphoneTip; private ObjectAnimator ballAnimator; private ObjectAnimator mCenterAnim; private ConstraintLayout mCsRoot; public CustomDelayCheckView(@NonNull Context context) { super(context); } public CustomDelayCheckView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public CustomDelayCheckView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected int getLayoutRes() { return R.layout.ac_custom_delay_check_layout; } @Override public void initView() { super.initView(); mIvBack = findViewById(R.id.iv_close); mIvBall = findViewById(R.id.iv_ball); ImageView iv_ball2 = findViewById(R.id.iv_ball2); mViewAnim1 = findViewById(R.id.view_anim1); mViewAnim2 = findViewById(R.id.view_anim2); mIvTip = findViewById(R.id.iv_tip); mViewRetry = findViewById(R.id.view_retry); mIvCenter = findViewById(R.id.iv_center); mLlEarphoneTip = findViewById(R.id.ll_earphone_tip); mCsRoot = findViewById(R.id.cs_root); fitPad(); } private void fitPad() { boolean isTablet = QMUIDeviceHelper.isTablet(getContext()); ConstraintSet constraintSet =new ConstraintSet(); constraintSet.clone(mCsRoot); constraintSet.connect(R.id.iv_center,ConstraintSet.TOP, R.id.iv_tip, ConstraintSet.BOTTOM); constraintSet.connect(R.id.iv_center,ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT); constraintSet.connect(R.id.iv_center,ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT); if(isTablet){ constraintSet.connect(R.id.iv_center,ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM); constraintSet.setMargin(R.id.iv_tip,ConstraintSet.TOP, SizeUtils.dp2px(50)); } constraintSet.applyTo(mCsRoot); } @Override public void initData() { super.initData(); ballAnimator = ObjectAnimator.ofFloat(mIvBall, "rotation", 0f, 360f); ballAnimator.setDuration(8000); ballAnimator.setRepeatCount(ValueAnimator.INFINITE); ballAnimator.setInterpolator(new LinearInterpolator()); ballAnimator.start(); mCenterAnim = ObjectAnimator.ofFloat(mIvCenter, "translationY", 0f, 24f); mCenterAnim.setDuration(1000); mCenterAnim.setRepeatCount(ValueAnimator.INFINITE); mCenterAnim.setInterpolator(new LinearInterpolator()); mCenterAnim.setRepeatMode(ValueAnimator.REVERSE); mCenterAnim.start(); this.mLlEarphoneTip.setOnClickListener(new OnClickListener() { public void onClick(View v) { CustomDelayCheckView.this.mLlEarphoneTip.setVisibility(View.GONE); } }); } @Override public void showAnimStep(int step) { if (mViewRetry != null) { mViewRetry.setVisibility(step == CHECK_FAIL ? View.VISIBLE : View.GONE); } if (step != CHECK_COMPLETED) { if (step == CHECK_PREPARE) { resetAnim(); } if (step == CHECK_FAIL_TIP_EARPHONE) { mLlEarphoneTip.setVisibility(View.VISIBLE); return; } else { mLlEarphoneTip.setVisibility(View.GONE); } int mainAnimRes = getMainAnimRes(step); mIvCenter.setImageResource(mainAnimRes); mIvTip.setImageResource(getTipImgRes(step)); } else { handleCompletedAnim(); } } private void handleCompletedAnim() { } private int getMainAnimRes(int step) { if (step == CHECK_PREPARE) { return R.drawable.ac_check_prepare; } if (step == CHECK_ING) { return R.drawable.ac_check_ing; } if (step == CHECK_SUCCESS) { return R.drawable.ac_check_success; } if (step == CHECK_FAIL) { return R.drawable.ac_check_fail; } return R.drawable.ac_check_prepare; } private void resetAnim() { } private int getTipImgRes(int step) { if (step == CHECK_PREPARE) { return R.drawable.ac_icon_delay_check_tip1; } if (step == CHECK_ING) { return R.drawable.ac_icon_delay_check_tip2; } if (step == CHECK_SUCCESS) { return R.drawable.ac_icon_delay_check_tip3; } if (step == CHECK_FAIL) { return R.drawable.ac_icon_delay_check_tip4; } return R.drawable.ac_icon_delay_check_tip1; } @Override public void setOnViewClickListener(OnClickListener onViewClickListener) { super.setOnViewClickListener(onViewClickListener); if (mIvBack != null) { mIvBack.setOnClickListener(onViewClickListener); } if (mViewRetry != null) { mViewRetry.setOnClickListener(onViewClickListener); } } @Override public void release() { super.release(); if (mViewAnim1 != null) { mViewAnim1.cancelAnimation(); mViewAnim1.clearAnimation(); } if (mViewAnim2 != null) { mViewAnim2.cancelAnimation(); mViewAnim2.clearAnimation(); } if (mIvBall != null) { mIvBall.clearAnimation(); } if (mIvCenter != null) { mIvCenter.clearAnimation(); } if (ballAnimator != null) { ballAnimator.cancel(); ballAnimator =null; } if (mCenterAnim != null) { mCenterAnim.cancel(); mCenterAnim =null; } } }