package com.mylhyl.circledialog.view; import android.content.Context; import android.text.TextUtils; import android.view.Gravity; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.Nullable; import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieDrawable; import com.mylhyl.circledialog.internal.BackgroundHelper; import com.mylhyl.circledialog.internal.CircleParams; import com.mylhyl.circledialog.internal.Controller; import com.mylhyl.circledialog.params.DialogParams; import com.mylhyl.circledialog.params.LottieParams; import com.mylhyl.circledialog.view.listener.OnCreateLottieListener; /** * Created by hupei on 2018/7/7. */ final class BodyLottieView extends LinearLayout { private LottieAnimationView mLottieAnimationView; private TextView mTextView; private DialogParams mDialogParams; private LottieParams mLottieParams; private OnCreateLottieListener mOnCreateLottieListener; public BodyLottieView(Context context, CircleParams circleParams) { super(context); init(circleParams); } private void init(CircleParams circleParams) { this.mDialogParams = circleParams.dialogParams; this.mLottieParams = circleParams.lottieParams; this.mOnCreateLottieListener = circleParams.circleListeners.createLottieListener; setOrientation(LinearLayout.VERTICAL); // 如果没有背景色,则使用默认色 int backgroundColor = mLottieParams.backgroundColor != 0 ? mLottieParams.backgroundColor : mDialogParams.backgroundColor; BackgroundHelper.handleBodyBackground(this, backgroundColor, circleParams); createLottieView(); createText(); if (mOnCreateLottieListener != null) { mOnCreateLottieListener.onCreateLottieView(mLottieAnimationView, mTextView); } } private void createLottieView() { mLottieAnimationView = new LottieAnimationView(getContext()); int lottieWidth = Controller.dp2px(getContext(), mLottieParams.lottieWidth); int lottieHeight = Controller.dp2px(getContext(), mLottieParams.lottieHeight); LayoutParams layoutParams = new LayoutParams(lottieWidth <= 0 ? LayoutParams.WRAP_CONTENT : lottieWidth, lottieHeight <= 0 ? LayoutParams.WRAP_CONTENT : lottieHeight); int[] margins = mLottieParams.margins; if (margins != null) layoutParams.setMargins(Controller.dp2px(getContext(), margins[0]), Controller.dp2px(getContext(), margins[1]), Controller.dp2px(getContext(), margins[2]), Controller.dp2px(getContext(), margins[3])); layoutParams.gravity = Gravity.CENTER; if (mLottieParams.animationResId != 0) { mLottieAnimationView.setAnimation(mLottieParams.animationResId); } if (!TextUtils.isEmpty(mLottieParams.animationFileName)) { mLottieAnimationView.setAnimation(mLottieParams.animationFileName); } if (!TextUtils.isEmpty(mLottieParams.imageAssetsFolder)) { mLottieAnimationView.setImageAssetsFolder(mLottieParams.imageAssetsFolder); } if (mLottieParams.autoPlay) { mLottieAnimationView.playAnimation(); } if (mLottieParams.loop) { mLottieAnimationView.setRepeatCount(LottieDrawable.INFINITE); } addView(mLottieAnimationView, layoutParams); } @Nullable private void createText() { //构建文本 if (!TextUtils.isEmpty(mLottieParams.text)) { mTextView = new TextView(getContext()); LayoutParams textLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); textLayoutParams.gravity = Gravity.CENTER; int[] textMargins = mLottieParams.textMargins; if (textMargins != null) { textLayoutParams.setMargins(Controller.dp2px(getContext(), textMargins[0]), Controller.dp2px(getContext(), textMargins[1]), Controller.dp2px(getContext(), textMargins[2]), Controller.dp2px(getContext(), textMargins[3])); } if (mDialogParams.typeface != null) { mTextView.setTypeface(mDialogParams.typeface); } mTextView.setText(mLottieParams.text); mTextView.setTextSize(mLottieParams.textSize); mTextView.setTextColor(mLottieParams.textColor); mTextView.setTypeface(mTextView.getTypeface(), mLottieParams.styleText); int[] textPadding = mLottieParams.textPadding; if (textPadding != null) { mTextView.setPadding(Controller.dp2px(getContext(), textPadding[0]), Controller.dp2px(getContext(), textPadding[1]), Controller.dp2px(getContext(), textPadding[2]), Controller.dp2px(getContext(), textPadding[3])); } addView(mTextView, textLayoutParams); } } public void refreshText() { if (mLottieParams == null) { return; } if (mLottieAnimationView != null) { if (mLottieParams.animationResId != 0) { mLottieAnimationView.setAnimation(mLottieParams.animationResId); } if (!TextUtils.isEmpty(mLottieParams.animationFileName)) { mLottieAnimationView.setAnimation(mLottieParams.animationFileName); } if (!TextUtils.isEmpty(mLottieParams.imageAssetsFolder)) { mLottieAnimationView.setImageAssetsFolder(mLottieParams.imageAssetsFolder); } mLottieAnimationView.playAnimation(); } if (mTextView != null && !TextUtils.isEmpty(mLottieParams.text)) { mTextView.setText(mLottieParams.text); } } }