package com.xscm.moduleutil.view; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.Nullable; import com.bumptech.glide.Glide; import com.xscm.moduleutil.R; import com.xscm.moduleutil.bean.GiftBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean; public class QXMeetGiftView extends RelativeLayout { private TextView giftNameLabel; private ImageView giftPriceBgView; private Button giftCoin; private ImageView bgImageView; private ImageView giftBgImageView; private ImageView giftImageView; private boolean isLockGift; private Object model; // 这里用 Object 代替 QXDrawGiftModel public QXMeetGiftView(Context context) { super(context); initSubviews(context); } public QXMeetGiftView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initSubviews(context); } public QXMeetGiftView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initSubviews(context); } private void initSubviews(Context context) { // 创建背景图片视图 bgImageView = new ImageView(context); bgImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); bgImageView.setImageResource(R.drawable.ac_left_gift_bg); LayoutParams bgParams = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ); addView(bgImageView, bgParams); // 创建礼物图片视图(圆形) giftImageView = new ImageView(context); giftImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); LayoutParams giftImageParams = new LayoutParams( dpToPx(48), // 固定宽度 dpToPx(62) // 固定高度 ); giftImageParams.addRule(CENTER_IN_PARENT); giftImageParams.topMargin = dpToPx(10); addView(giftImageView, giftImageParams); // 创建礼物背景光效视图 giftBgImageView = new ImageView(context); giftBgImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); giftBgImageView.setImageResource(R.drawable.ac_lock_gift_light_bg); giftBgImageView.setVisibility(View.GONE); // 初始隐藏 LayoutParams giftBgParams = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ); addView(giftBgImageView, giftBgParams); // 创建价格背景视图 giftPriceBgView = new ImageView(context); giftPriceBgView.setImageResource(R.drawable.ac_meet_gift_name_bg); LayoutParams priceBgParams = new LayoutParams( LayoutParams.MATCH_PARENT, dpToPx(15) ); priceBgParams.addRule(CENTER_HORIZONTAL); priceBgParams.addRule(ALIGN_PARENT_BOTTOM); priceBgParams.bottomMargin = dpToPx(10); // 在名称标签上方 addView(giftPriceBgView, priceBgParams); // 创建金币按钮 giftCoin = new Button(context); giftCoin.setTextColor(0xFFC7BF62); // 使用直接的颜色值 // 设置按钮图标 Drawable coinDrawable = getResources().getDrawable(R.mipmap.jinb); coinDrawable.setBounds(0, 0, dpToPx(1), dpToPx(1)); giftCoin.setCompoundDrawables(coinDrawable, null, null, null); giftCoin.setTextSize(10); giftCoin.setBackgroundColor(0x00000000); // 透明背景 LayoutParams coinParams = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ); coinParams.addRule(CENTER_HORIZONTAL); coinParams.addRule(ALIGN_PARENT_BOTTOM); coinParams.bottomMargin = -dpToPx(2); addView(giftCoin, coinParams); // 创建礼物名称标签 giftNameLabel = new TextView(context); giftNameLabel.setTextColor(0xFFFFFFFF); giftNameLabel.setTextSize(12); giftNameLabel.setGravity(android.view.Gravity.CENTER); giftNameLabel.setSingleLine(true); // 设置为单行显示 giftNameLabel.setEllipsize(android.text.TextUtils.TruncateAt.END); // 超出部分用省略号表示 LayoutParams nameParams = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT ); nameParams.addRule(CENTER_HORIZONTAL); nameParams.addRule(ALIGN_PARENT_BOTTOM); nameParams.bottomMargin = dpToPx(1); addView(giftNameLabel, nameParams); // 调整视图层级 - 确保正确的层级关系 // 按添加顺序已经确定层级,最晚添加的在最上层 } public void setIsLockGift(boolean isLockGift) { this.isLockGift = isLockGift; // 设置背景图片 int bgResource = isLockGift ? R.drawable.ac_lock_gift_bg : R.drawable.ac_left_gift_bg; bgImageView.setImageResource(bgResource); // 显示/隐藏光效背景 giftBgImageView.setVisibility(isLockGift ? View.VISIBLE : View.GONE); if (isLockGift) { // 重新设置礼物图片的约束 LayoutParams params = (LayoutParams) giftImageView.getLayoutParams(); params.width = dpToPx(36); params.height = dpToPx(36); params.addRule(CENTER_IN_PARENT); params.setMargins(0, 0, 0, 0); giftImageView.setLayoutParams(params); } else { // 恢复原始约束 LayoutParams params = (LayoutParams) giftImageView.getLayoutParams(); params.width = LayoutParams.MATCH_PARENT; params.height = LayoutParams.WRAP_CONTENT; params.addRule(CENTER_IN_PARENT); params.setMargins(dpToPx(6), dpToPx(6), dpToPx(6), 0); giftImageView.setLayoutParams(params); } } public void setModel(BlindBoxBean.GiveGift model) { this.model = model; // 这里需要根据您的 QXDrawGiftModel 类来实现具体逻辑 if (model instanceof BlindBoxBean.GiveGift) { BlindBoxBean.GiveGift giftModel = (BlindBoxBean.GiveGift) model; // 使用图片加载库加载图片 Glide.with(getContext()).load(giftModel.getBase_image()).into(giftImageView); giftNameLabel.setText(giftModel.getGift_name()); giftCoin.setText(giftModel.getGift_price()); } } public void startAnimation() { // 礼物图片顺时针旋转动画 RotateAnimation rotateAnimation = new RotateAnimation( 0, 360, // 从 0 度旋转到 360 度 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f ); rotateAnimation.setDuration(3000); // 3 秒 rotateAnimation.setRepeatCount(Animation.INFINITE); rotateAnimation.setRepeatMode(Animation.RESTART); rotateAnimation.setInterpolator(getContext(), android.R.anim.linear_interpolator); giftImageView.startAnimation(rotateAnimation); // 光效背景逆时针旋转动画 RotateAnimation rotateAnimation1 = new RotateAnimation( 0, -360, // 从 0 度旋转到 -360 度 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f ); rotateAnimation1.setDuration(3000); // 3 秒 rotateAnimation1.setRepeatCount(Animation.INFINITE); rotateAnimation1.setRepeatMode(Animation.RESTART); rotateAnimation1.setInterpolator(getContext(), android.R.anim.linear_interpolator); giftBgImageView.startAnimation(rotateAnimation1); } public void resetAnimation() { giftImageView.clearAnimation(); giftBgImageView.clearAnimation(); } public void stopAnimation() { giftImageView.clearAnimation(); giftBgImageView.clearAnimation(); } // 辅助方法:dp 转 px private int dpToPx(int dp) { float density = getResources().getDisplayMetrics().density; return Math.round(dp * density); } // 缩放宽度方法(对应 ScaleWidth) private int scaleWidth(int value) { // 这里需要根据您的缩放逻辑实现 // 通常可以根据屏幕密度进行缩放 float scale = getResources().getDisplayMetrics().density; return (int) (value * scale); } // Getter 方法 public TextView getGiftNameLabel() { return giftNameLabel; } public ImageView getGiftPriceBgView() { return giftPriceBgView; } public Button getGiftCoin() { return giftCoin; } public ImageView getBgImageView() { return bgImageView; } public ImageView getGiftBgImageView() { return giftBgImageView; } public ImageView getGiftImageView() { return giftImageView; } public boolean isLockGift() { return isLockGift; } public Object getModel() { return model; } }