262 lines
9.2 KiB
Java
262 lines
9.2 KiB
Java
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|