From 0646f245b64b326f70e01459e72c542dd437d7e5 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Tue, 25 Jul 2023 14:08:52 +0800 Subject: [PATCH] =?UTF-8?q?6.5.4=E7=A4=BC=E7=89=A9=E6=A0=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/build.gradle | 3 +- .../common/adapter/GiftNumberAdapter.java | 40 + .../yunbao/common/bean/GiftQuantityModel.java | 43 + .../com/yunbao/common/bean/LiveGiftBean.java | 26 +- .../yunbao/common/event/GiftNumberEvent.java | 16 + .../com/yunbao/common/glide/ImgLoader.java | 12 + .../yunbao/common/http/CommonHttpUtil.java | 6 +- .../com/yunbao/common/http/PDLiveApi.java | 1 + .../common/manager/GiftQuantityManager.java | 53 + .../yunbao/common/utils/BlurBitmapUtil.java | 56 + .../common/views/CustomDrawerPopupView.java | 2 +- .../com/yunbao/common/views/GiftNumber.java | 34 + .../yunbao/common/views/GiftNumberPopup.java | 59 + .../res/drawable/backgroud_custom_gift.xml | 10 + .../res/drawable/backgroud_custom_gift2.png | Bin 0 -> 73119 bytes .../drawable/background_gift_description.xml | 8 + .../res/drawable/background_gift_money.xml | 5 + .../res/drawable/background_gift_money2.xml | 7 + .../res/drawable/background_gift_select2.xml | 11 + .../res/drawable/bg_live_gift_send_new.xml | 15 + .../src/main/res/drawable/bg_parcel_point.xml | 5 + .../res/drawable/bg_selection_quantity.png | Bin 0 -> 10377 bytes .../main/res/drawable/icon_covering_layer.png | Bin 0 -> 2110 bytes .../main/res/drawable/progress_bg_user.xml | 21 + .../res/layout/dialog_live_gift_popup.xml | 357 ++++++ .../src/main/res/layout/view_blind_box.xml | 0 .../src/main/res/layout/view_gift_number.xml | 17 + .../main/res/layout/view_live_gift_number.xml | 45 + common/src/main/res/layout/view_nobility.xml | 65 + .../res/mipmap-mdpi/icon_live_gift_lian.png | Bin .../res/mipmap-xxhdpi}/bg_blind_bottom.png | Bin .../res/mipmap-xxhdpi/icon_aristocrat_tip.png | Bin 0 -> 2576 bytes .../res/mipmap-xxhdpi/icon_arrow_down.png | Bin 0 -> 168 bytes .../res/mipmap-xxhdpi/icon_arrow_right.png | Bin 0 -> 165 bytes .../res/mipmap-xxhdpi/icon_empty_parcel.png | Bin 0 -> 18818 bytes .../icon_established_nobility.png | Bin 0 -> 855 bytes .../mipmap-xxhdpi/icon_grade_angle_mark.png | Bin 0 -> 1074 bytes .../res/mipmap-xxhdpi}/icon_live_gift_2.png | Bin .../src/main/res/mipmap-xxhdpi/icon_right.png | Bin 0 -> 357 bytes .../src/main/res/mipmap-xxhdpi}/icon_what.png | Bin common/src/main/res/values/strings.xml | 4 + config.gradle | 4 +- .../live/activity/LiveAudienceActivity.java | 91 +- .../yunbao/live/adapter/FrameGiftAdapter.java | 69 ++ .../yunbao/live/adapter/GiftTitleAdapter.java | 60 + .../adapter/LiveGiftFragmentPagerAdapter.java | 33 + .../live/adapter/LiveParcelItemAdapter.java | 85 ++ .../java/com/yunbao/live/bean/CoinModel.java | 115 ++ .../com/yunbao/live/dialog/LiveGiftPopup.java | 1100 +++++++++++++++++ .../com/yunbao/live/event/GiftTitleEvent.java | 26 + .../yunbao/live/event/LiveAudienceEvent.java | 70 ++ .../yunbao/live/event/LiveGiftItemEvent.java | 20 + .../event/LiveParcelItemRefreshEvent.java | 17 + .../live/presenter/LiveGiftAnimPresenter.java | 19 +- .../live/views/FrameGiftViewHolder.java | 158 +++ .../live/views/GiftTitleViewHolder.java | 50 + .../live/views/LiveAudienceViewHolder.java | 12 +- .../yunbao/live/views/LiveGiftFragment.java | 149 +++ .../live/views/LiveGiftItemFragment.java | 82 ++ .../yunbao/live/views/LiveParcelFragment.java | 162 +++ .../live/views/LiveParcelItemFragment.java | 82 ++ .../live/views/LiveParcelItemViewHolder.java | 138 +++ .../yunbao/live/views/LiveRoomViewHolder.java | 51 +- .../res/drawable/background_gift_select.xml | 13 + .../main/res/layout/fragment_live_gift.xml | 23 + .../res/layout/fragment_live_gift_item.xml | 13 + .../main/res/layout/fragment_live_parcel.xml | 52 + live/src/main/res/layout/item_frame_gift.xml | 79 ++ .../src/main/res/layout/item_gift_top_new.xml | 18 + live/src/main/res/layout/item_live_parcel.xml | 97 ++ .../live_icon_leftt_sliding.png | Bin 331 -> 357 bytes 71 files changed, 3705 insertions(+), 104 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/adapter/GiftNumberAdapter.java create mode 100644 common/src/main/java/com/yunbao/common/bean/GiftQuantityModel.java create mode 100644 common/src/main/java/com/yunbao/common/event/GiftNumberEvent.java create mode 100644 common/src/main/java/com/yunbao/common/manager/GiftQuantityManager.java create mode 100644 common/src/main/java/com/yunbao/common/utils/BlurBitmapUtil.java create mode 100644 common/src/main/java/com/yunbao/common/views/GiftNumber.java create mode 100644 common/src/main/java/com/yunbao/common/views/GiftNumberPopup.java create mode 100644 common/src/main/res/drawable/backgroud_custom_gift.xml create mode 100644 common/src/main/res/drawable/backgroud_custom_gift2.png create mode 100644 common/src/main/res/drawable/background_gift_description.xml create mode 100644 common/src/main/res/drawable/background_gift_money.xml create mode 100644 common/src/main/res/drawable/background_gift_money2.xml create mode 100644 common/src/main/res/drawable/background_gift_select2.xml create mode 100644 common/src/main/res/drawable/bg_live_gift_send_new.xml create mode 100644 common/src/main/res/drawable/bg_parcel_point.xml create mode 100644 common/src/main/res/drawable/bg_selection_quantity.png create mode 100644 common/src/main/res/drawable/icon_covering_layer.png create mode 100644 common/src/main/res/drawable/progress_bg_user.xml create mode 100644 common/src/main/res/layout/dialog_live_gift_popup.xml rename {live => common}/src/main/res/layout/view_blind_box.xml (100%) create mode 100644 common/src/main/res/layout/view_gift_number.xml create mode 100644 common/src/main/res/layout/view_live_gift_number.xml create mode 100644 common/src/main/res/layout/view_nobility.xml rename {live => common}/src/main/res/mipmap-mdpi/icon_live_gift_lian.png (100%) rename {live/src/main/res/mipmap-xxxhdpi => common/src/main/res/mipmap-xxhdpi}/bg_blind_bottom.png (100%) create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_aristocrat_tip.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_arrow_down.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_arrow_right.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_empty_parcel.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_established_nobility.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_grade_angle_mark.png rename {live/src/main/res/mipmap-mdpi => common/src/main/res/mipmap-xxhdpi}/icon_live_gift_2.png (100%) create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_right.png rename {live/src/main/res/mipmap-xxxhdpi => common/src/main/res/mipmap-xxhdpi}/icon_what.png (100%) create mode 100644 live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/adapter/GiftTitleAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/adapter/LiveGiftFragmentPagerAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/adapter/LiveParcelItemAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/bean/CoinModel.java create mode 100644 live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java create mode 100644 live/src/main/java/com/yunbao/live/event/GiftTitleEvent.java create mode 100644 live/src/main/java/com/yunbao/live/event/LiveGiftItemEvent.java create mode 100644 live/src/main/java/com/yunbao/live/event/LiveParcelItemRefreshEvent.java create mode 100644 live/src/main/java/com/yunbao/live/views/FrameGiftViewHolder.java create mode 100644 live/src/main/java/com/yunbao/live/views/GiftTitleViewHolder.java create mode 100644 live/src/main/java/com/yunbao/live/views/LiveGiftFragment.java create mode 100644 live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java create mode 100644 live/src/main/java/com/yunbao/live/views/LiveParcelFragment.java create mode 100644 live/src/main/java/com/yunbao/live/views/LiveParcelItemFragment.java create mode 100644 live/src/main/java/com/yunbao/live/views/LiveParcelItemViewHolder.java create mode 100644 live/src/main/res/drawable/background_gift_select.xml create mode 100644 live/src/main/res/layout/fragment_live_gift.xml create mode 100644 live/src/main/res/layout/fragment_live_gift_item.xml create mode 100644 live/src/main/res/layout/fragment_live_parcel.xml create mode 100644 live/src/main/res/layout/item_frame_gift.xml create mode 100644 live/src/main/res/layout/item_gift_top_new.xml create mode 100644 live/src/main/res/layout/item_live_parcel.xml diff --git a/common/build.gradle b/common/build.gradle index 09d7dd30a..19700ba89 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -194,5 +194,6 @@ dependencies { //选择器 api 'com.github.gzu-liyujiang.AndroidPicker:Common:4.1.11' api 'com.github.gzu-liyujiang.AndroidPicker:WheelView:4.1.11' - + //自定义圆角图片 + api 'com.makeramen:roundedimageview:2.3.0' } diff --git a/common/src/main/java/com/yunbao/common/adapter/GiftNumberAdapter.java b/common/src/main/java/com/yunbao/common/adapter/GiftNumberAdapter.java new file mode 100644 index 000000000..6dcea6851 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/adapter/GiftNumberAdapter.java @@ -0,0 +1,40 @@ +package com.yunbao.common.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.R; +import com.yunbao.common.bean.GiftQuantityModel; +import com.yunbao.common.views.GiftNumber; + +import java.util.List; + +public class GiftNumberAdapter extends RecyclerView.Adapter { + private List giftQuantityModels; + + public GiftNumberAdapter(List giftQuantityModels) { + this.giftQuantityModels = giftQuantityModels; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View robotSayHelloView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_gift_number, parent, false); + return new GiftNumber(robotSayHelloView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + GiftNumber giftNumber = (GiftNumber) holder; + giftNumber.showData(giftQuantityModels.get(position)); + } + + @Override + public int getItemCount() { + return giftQuantityModels.size(); + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/GiftQuantityModel.java b/common/src/main/java/com/yunbao/common/bean/GiftQuantityModel.java new file mode 100644 index 000000000..09fda25b7 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/GiftQuantityModel.java @@ -0,0 +1,43 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +/** + * 礼物选择数量 + */ +public class GiftQuantityModel extends BaseModel { + + @SerializedName("id") + private String id; + @SerializedName("gift_quantity") + private String giftQuantity; + @SerializedName("font_colour") + private String fontColour; + + public String getId() { + return id; + } + + public GiftQuantityModel setId(String id) { + this.id = id; + return this; + } + + public String getGiftQuantity() { + return giftQuantity; + } + + public GiftQuantityModel setGiftQuantity(String giftQuantity) { + this.giftQuantity = giftQuantity; + return this; + } + + public String getFontColour() { + return fontColour; + } + + public GiftQuantityModel setFontColour(String fontColour) { + this.fontColour = fontColour; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java b/common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java index c0777d57e..78583150b 100644 --- a/common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java +++ b/common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java @@ -23,7 +23,7 @@ public class LiveGiftBean { private String name; private String price; private String icon; - private boolean checked; + private boolean checked = false; private int page; private View mView; private String sendType;//支付是金币还是钻石 @@ -36,6 +36,30 @@ public class LiveGiftBean { private String tag; @JSONField(name = "blind_box_type") private int blind_box_type = 0; + //礼物角标 + + @JSONField(name = "corner_mark") + private String cornerMark; + @JSONField(name = "gift_description") + private String giftDescription; + + public String getGiftDescription() { + return giftDescription; + } + + public LiveGiftBean setGiftDescription(String giftDescription) { + this.giftDescription = giftDescription; + return this; + } + + public String getCornerMark() { + return cornerMark; + } + + public LiveGiftBean setCornerMark(String cornerMark) { + this.cornerMark = cornerMark; + return this; + } public int getBlind_box_type() { return blind_box_type; diff --git a/common/src/main/java/com/yunbao/common/event/GiftNumberEvent.java b/common/src/main/java/com/yunbao/common/event/GiftNumberEvent.java new file mode 100644 index 000000000..b4684d0b8 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/event/GiftNumberEvent.java @@ -0,0 +1,16 @@ +package com.yunbao.common.event; + +import com.yunbao.common.bean.BaseModel; + +public class GiftNumberEvent extends BaseModel { + private String mCount; + + public String getmCount() { + return mCount; + } + + public GiftNumberEvent setmCount(String mCount) { + this.mCount = mCount; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/glide/ImgLoader.java b/common/src/main/java/com/yunbao/common/glide/ImgLoader.java index 4d7882868..f13262a34 100644 --- a/common/src/main/java/com/yunbao/common/glide/ImgLoader.java +++ b/common/src/main/java/com/yunbao/common/glide/ImgLoader.java @@ -336,6 +336,18 @@ public class ImgLoader { builder.into(imageView); } + public static void displayBlurLive(Context context, int url, ImageView imageView) { + if (!contextIsExist(context)) { + return; + } + RequestBuilder builder = Glide.with(context) + .load(url) + .thumbnail(thumbnail) + .apply(RequestOptions.bitmapTransform(new BlurTransformation(20))) + .placeholder(R.mipmap.live_bg); + builder.into(imageView); + } + private static boolean contextIsExist(Context context) { if (context == null) { return false; diff --git a/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java b/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java index 439bc94da..3f038fab2 100644 --- a/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java +++ b/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java @@ -19,13 +19,13 @@ import com.yunbao.common.bean.ConfigBean; import com.yunbao.common.event.FollowEvent; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.APKManager; +import com.yunbao.common.manager.GiftQuantityManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.LiveClassManager; import com.yunbao.common.manager.NewLevelManager; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.L; -import com.yunbao.common.utils.MD5Util; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.VersionUtil; @@ -231,6 +231,10 @@ public class CommonHttpUtil { if (obj.containsKey("defaultBubbleUrl")) { IMLoginManager.get(context).setDefaultBubbleUrl(obj.getString("defaultBubbleUrl")); } + if (obj.containsKey("gift_quantity")) { + JSONArray giftQuantity = obj.getJSONArray("gift_quantity"); + new GiftQuantityManager(context).UpGiftQuantity(giftQuantity.toJSONString()); + } } catch (Exception e) { e.printStackTrace(); String error = "info[0]:" + info[0] + "\n\n\n" + "Exception:" + e.getClass() + "---message--->" + e.getMessage(); diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 60938e8fb..ab99cf322 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -829,4 +829,5 @@ public interface PDLiveApi { @Query("stream") String stream, @Query("red_packet_id") String redPacketId ); + } diff --git a/common/src/main/java/com/yunbao/common/manager/GiftQuantityManager.java b/common/src/main/java/com/yunbao/common/manager/GiftQuantityManager.java new file mode 100644 index 000000000..cdb98a0be --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/GiftQuantityManager.java @@ -0,0 +1,53 @@ +package com.yunbao.common.manager; + +import android.content.Context; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.yunbao.common.bean.GiftQuantityModel; +import com.yunbao.common.bean.LiveClassBean; +import com.yunbao.common.manager.base.BaseCacheManager; + +import java.util.List; + +public class GiftQuantityManager extends BaseCacheManager { + private final static String KEY_GIFT_QUANTITY = "GiftQuantity"; + private static GiftQuantityManager manager; + private Context context; + private List giftQuantityModels; + + public GiftQuantityManager(Context context) { + super(context); + } + + /** + * 获取指导员备注信息 + * + * @return + */ + public List getGiftQuantity() { + List giftQuantityModels = getList(KEY_GIFT_QUANTITY, new TypeToken>() { + }.getType()); + if (giftQuantityModels == null || giftQuantityModels.size() == 0) { + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("1").setFontColour("#ffffff")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("10").setFontColour("#ffffff")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("66").setFontColour("#ffffff")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("88").setFontColour("#FA62A1")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("100").setFontColour("#9B62FF")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("520").setFontColour("#65BFFB")); + giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("1314").setFontColour("#05F3EC")); + } + return giftQuantityModels; + } + + /** + * 缓存等级图标 + * + * @param json + */ + public void UpGiftQuantity(String json) { + giftQuantityModels = new Gson().fromJson(json, new TypeToken>() { + }.getType()); + put(KEY_GIFT_QUANTITY, giftQuantityModels); + } +} diff --git a/common/src/main/java/com/yunbao/common/utils/BlurBitmapUtil.java b/common/src/main/java/com/yunbao/common/utils/BlurBitmapUtil.java new file mode 100644 index 000000000..b674089a2 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/utils/BlurBitmapUtil.java @@ -0,0 +1,56 @@ +package com.yunbao.common.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.RenderScript; +import android.renderscript.ScriptIntrinsicBlur; + +/** + * Created by L on 2017/10/12. + */ + +public class BlurBitmapUtil { + /** + * 图片缩放比例 + */ + private static final float BITMAP_SCALE = 0.4f; + /** + * 最大模糊度(在0.0到25.0之间) + */ + private static final float BLUR_RADIUS = 25f; + /** + * 模糊图片的具体方法 + * + * @param context 上下文对象 + * @param image 需要模糊的图片 + * @return 模糊处理后的图片 + */ + public static Bitmap blur(Context context, Bitmap image) { + // 计算图片缩小后的长宽 + int width = Math.round(image.getWidth() * BITMAP_SCALE); + int height = Math.round(image.getHeight() * BITMAP_SCALE); + // 将缩小后的图片做为预渲染的图片。 + Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false); + // 创建一张渲染后的输出图片。 + Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap); + // 创建RenderScript内核对象 + RenderScript rs = RenderScript.create(context); + // 创建一个模糊效果的RenderScript的工具对象 + ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); + // 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间。 + // 创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去。 + Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap); + Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); + // 设置渲染的模糊程度, 25f是最大模糊度 + blurScript.setRadius(BLUR_RADIUS); + // 设置blurScript对象的输入内存 + blurScript.setInput(tmpIn); + // 将输出数据保存到输出内存中 + blurScript.forEach(tmpOut); + // 将数据填充到Allocation中 + tmpOut.copyTo(outputBitmap); + return outputBitmap; + } +} diff --git a/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java b/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java index 232ea3a6c..7705efb0b 100644 --- a/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java +++ b/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java @@ -139,7 +139,7 @@ public class CustomDrawerPopupView extends DrawerPopupView { ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.online), new ViewClicksAntiShake.ViewClicksCallBack() { @Override public void onViewClicks() { - XPopup.Builder builder = new XPopup.Builder(getContext()).atView(findViewById(R.id.more_menu)); + XPopup.Builder builder = new XPopup.Builder(getContext()).atView(findViewById(R.id.diamond_linear)); builder.hasShadowBg(false) .isDestroyOnDismiss(true) .isLightStatusBar(false) diff --git a/common/src/main/java/com/yunbao/common/views/GiftNumber.java b/common/src/main/java/com/yunbao/common/views/GiftNumber.java new file mode 100644 index 000000000..c6d021823 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/GiftNumber.java @@ -0,0 +1,34 @@ +package com.yunbao.common.views; + +import android.graphics.Color; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.R; +import com.yunbao.common.bean.GiftQuantityModel; +import com.yunbao.common.event.GiftNumberEvent; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.views.weight.ViewClicksAntiShake; + +public class GiftNumber extends RecyclerView.ViewHolder { + private TextView customQuantity; + + public GiftNumber(@NonNull View itemView) { + super(itemView); + customQuantity = itemView.findViewById(R.id.custom_quantity); + } + + public void showData(GiftQuantityModel quantityModel) { + customQuantity.setText(quantityModel.getGiftQuantity()); + customQuantity.setTextColor(Color.parseColor(quantityModel.getFontColour())); + ViewClicksAntiShake.clicksAntiShake(customQuantity, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + Bus.get().post(new GiftNumberEvent().setmCount(quantityModel.getGiftQuantity())); + } + }); + } +} diff --git a/common/src/main/java/com/yunbao/common/views/GiftNumberPopup.java b/common/src/main/java/com/yunbao/common/views/GiftNumberPopup.java new file mode 100644 index 000000000..54ddcdfea --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/GiftNumberPopup.java @@ -0,0 +1,59 @@ +package com.yunbao.common.views; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lxj.xpopup.core.BottomPopupView; +import com.yunbao.common.R; +import com.yunbao.common.adapter.GiftNumberAdapter; +import com.yunbao.common.event.GiftNumberEvent; +import com.yunbao.common.manager.GiftQuantityManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.views.weight.ViewClicksAntiShake; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +public class GiftNumberPopup extends BottomPopupView { + public GiftNumberPopup(@NonNull Context context) { + super(context); + } + + // 返回自定义弹窗的布局 + @Override + protected int getImplLayoutId() { + return R.layout.view_live_gift_number; + } + + // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑 + @Override + protected void onCreate() { + Bus.getOn(this); + super.onCreate(); + RecyclerView giftList = findViewById(R.id.gift_list); + giftList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); + GiftNumberAdapter giftNumberAdapter = new GiftNumberAdapter(new GiftQuantityManager(getContext()).getGiftQuantity()); + giftList.setAdapter(giftNumberAdapter); + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.to_can), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + dismiss(); + } + }); + } + + @Override + protected void onDismiss() { + super.onDismiss(); + Bus.getOff(this); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onGiftNumberEvent(GiftNumberEvent event) { + dismiss(); + } + +} diff --git a/common/src/main/res/drawable/backgroud_custom_gift.xml b/common/src/main/res/drawable/backgroud_custom_gift.xml new file mode 100644 index 000000000..d61532880 --- /dev/null +++ b/common/src/main/res/drawable/backgroud_custom_gift.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/backgroud_custom_gift2.png b/common/src/main/res/drawable/backgroud_custom_gift2.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7301771a40445a127cdfc482a8b30148d19225 GIT binary patch literal 73119 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 IF4TmQi|rXvQZ`qG$O! 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 literal 0 HcmV?d00001 diff --git a/common/src/main/res/drawable/background_gift_description.xml b/common/src/main/res/drawable/background_gift_description.xml new file mode 100644 index 000000000..0e79673a2 --- /dev/null +++ b/common/src/main/res/drawable/background_gift_description.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/background_gift_money.xml b/common/src/main/res/drawable/background_gift_money.xml new file mode 100644 index 000000000..524773a5d --- /dev/null +++ b/common/src/main/res/drawable/background_gift_money.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/background_gift_money2.xml b/common/src/main/res/drawable/background_gift_money2.xml new file mode 100644 index 000000000..eb1babf8d --- /dev/null +++ b/common/src/main/res/drawable/background_gift_money2.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/background_gift_select2.xml b/common/src/main/res/drawable/background_gift_select2.xml new file mode 100644 index 000000000..b7f308b1a --- /dev/null +++ b/common/src/main/res/drawable/background_gift_select2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_live_gift_send_new.xml b/common/src/main/res/drawable/bg_live_gift_send_new.xml new file mode 100644 index 000000000..0e72f15d9 --- /dev/null +++ b/common/src/main/res/drawable/bg_live_gift_send_new.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/src/main/res/drawable/bg_parcel_point.xml b/common/src/main/res/drawable/bg_parcel_point.xml new file mode 100644 index 000000000..1cb330428 --- /dev/null +++ b/common/src/main/res/drawable/bg_parcel_point.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_selection_quantity.png b/common/src/main/res/drawable/bg_selection_quantity.png new file mode 100644 index 0000000000000000000000000000000000000000..19fc075ce9d41dfcda30748f3dcd4670fcddca3a GIT binary patch literal 10377 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�{9;(Nzg4m8bikG`H1+9xL&7 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 E0K}6nY5)KL literal 0 HcmV?d00001 diff --git a/common/src/main/res/drawable/icon_covering_layer.png b/common/src/main/res/drawable/icon_covering_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..f343669dc48bb6578e923e07a3cf5c800dea0277 GIT binary patch literal 2110 zcmV-E2*LM>P)Px+_(?=TRCr$PoC%YhHV}myiDS;q+W-F-<~|+UJE&7n(qkGKW|(BXm87&)6d*J# z`gnZ^kQ%9f4-;q}{zd(Pyau$_ILE)?R_NA?c(lPw^~^Z zuA2b2T%4`5w9T@$dbUwp0dKi3p7&neB`^eL!P&AB@a)Fi`-c_?wr}m@#J0{FtXpuG zZon<*TfnV>VR^`k;~M4IUIljxS_#NyC|nazxh@-WONr&NEvntBRtwvz2tX{TG4He7 zt{1`G^C>uPVPPAKPwQ_Q5pCqGPE?zdNTaG#!@2!|3jGj|88EE-aS7f%*jwBI8*Nnu zCE8ezvB) zs*?ZWd|Rpjm~r2^f}R zD-ychPCM1O#B#tB>3me3h*PEFps0(5vbbGefc>5qY-2$=>d;(irjv=TDJ}Z2_wV0#FE20MIF3-* zE`)AS4ZF4tdsW@3`X2DqxeoQ6D%J!CSP@EUw0a5AbTgD_${B7j^$hTk%FRuPO3M%% z2@!7T@2m{y%jn0TAOHav!1_%@el=^95u8;Uet#3%WR~yVy#usi9LE9BRNK93*n6*g zRkv4_K|GY_dN0~1#m&^_0V!DZ1sso!HHw5f)rS-muI0(pzW|r(#fZHT8XY`UW`X@I zB3J;A00FL48*{raI_&fr(ZN4IKLgrs9LHS;oL2S>I;;+DvI>5a`b5GoZnj z?L!!kZR?I9grjre1ZX1e0BGvmAgV)B8lox9G$eSFqGrlL;K;!S^#C{?ZzcIce}zY& zX`Sn>nWv4OOV9uWU;qdz`#ysMJSq-Qt%s(H3pScXt>z!bUGmj7-#?mXzr{Uj!ol^B6`rK*&&KH>JUw-v^M*+2qZQ>(3eFR z1k#F5N&~nSzAyU5WZIMR{sAUcu$i|d^UAGOw=Z}OVHrM2o2z{jRnxG(q0c*2zqvI25o@SR3(~dR#fij zN57Pn2AEnZjVVYn+mO_mecGhZJLb8jG^m8o;L`vEN-Lp3X^f;)8qMQG@GkcXhvxjTJEP-rB(B+KCK1<`{IIW0(t~CPpi>0zYl#RxvkJDw3x`& zl%u8`@ljFj5nTJ8wHpn+F`F9_W74e_0dp`p3}p``Vf-u2x|1K z(KEhBsE@nzd(ZlgpuSj%Z?E#V9Pt%i?R%P6aW#6@=$SuLsE@nTTlgA1YxLyD%k{H_ z8a?X=F!}qm`UqmVYkC~o=uH|X<^U;mwiBIC|hsqCrs9ZmZPv7fq zdK(23t%EP-gUW6WzTkkbI?U$^?d~ui4j-%o%C68>2bA%{J}RvaUEDBq(L#%9M;#

CmOLc7Ubd8b%G{45Q_@5)6|$*TIy6_OH*jsQO9-`g|)eU%6Wgv->*%g zWN*&WZ$Gtqm-HlS$|J&upUz#tsQuYV?|)EYEoh$kI8M>MxzM1o)=Y8{TW= zno1sN+@o-o6t#8^tFm(Yt4^d@UgSL$-2(PVgYSX3XO3&f-)zd(dl&e%8hG#jzV`92 oHaYNXU+91GeE%1fyea&@0M^5eF#p7HdjJ3c07*qoM6N<$f{QWoLI3~& literal 0 HcmV?d00001 diff --git a/common/src/main/res/drawable/progress_bg_user.xml b/common/src/main/res/drawable/progress_bg_user.xml new file mode 100644 index 000000000..6d3cc5386 --- /dev/null +++ b/common/src/main/res/drawable/progress_bg_user.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/dialog_live_gift_popup.xml b/common/src/main/res/layout/dialog_live_gift_popup.xml new file mode 100644 index 000000000..63afb262c --- /dev/null +++ b/common/src/main/res/layout/dialog_live_gift_popup.xml @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_blind_box.xml b/common/src/main/res/layout/view_blind_box.xml similarity index 100% rename from live/src/main/res/layout/view_blind_box.xml rename to common/src/main/res/layout/view_blind_box.xml diff --git a/common/src/main/res/layout/view_gift_number.xml b/common/src/main/res/layout/view_gift_number.xml new file mode 100644 index 000000000..2a7f8828a --- /dev/null +++ b/common/src/main/res/layout/view_gift_number.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/view_live_gift_number.xml b/common/src/main/res/layout/view_live_gift_number.xml new file mode 100644 index 000000000..241947d70 --- /dev/null +++ b/common/src/main/res/layout/view_live_gift_number.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/view_nobility.xml b/common/src/main/res/layout/view_nobility.xml new file mode 100644 index 000000000..a11e0b664 --- /dev/null +++ b/common/src/main/res/layout/view_nobility.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/mipmap-mdpi/icon_live_gift_lian.png b/common/src/main/res/mipmap-mdpi/icon_live_gift_lian.png similarity index 100% rename from live/src/main/res/mipmap-mdpi/icon_live_gift_lian.png rename to common/src/main/res/mipmap-mdpi/icon_live_gift_lian.png diff --git a/live/src/main/res/mipmap-xxxhdpi/bg_blind_bottom.png b/common/src/main/res/mipmap-xxhdpi/bg_blind_bottom.png similarity index 100% rename from live/src/main/res/mipmap-xxxhdpi/bg_blind_bottom.png rename to common/src/main/res/mipmap-xxhdpi/bg_blind_bottom.png diff --git a/common/src/main/res/mipmap-xxhdpi/icon_aristocrat_tip.png b/common/src/main/res/mipmap-xxhdpi/icon_aristocrat_tip.png new file mode 100644 index 0000000000000000000000000000000000000000..5bad5e44833802c4a046a36685ad69f8935ca456 GIT binary patch literal 2576 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 QfwnPty85}Sb4q9e0A7YTdH?_b literal 0 HcmV?d00001 diff --git a/common/src/main/res/mipmap-xxhdpi/icon_arrow_right.png b/common/src/main/res/mipmap-xxhdpi/icon_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3175b9743e00ce0311087df4627efd7fa0eb010e GIT binary patch literal 165 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 literal 0 HcmV?d00001 diff --git a/common/src/main/res/mipmap-xxhdpi/icon_grade_angle_mark.png b/common/src/main/res/mipmap-xxhdpi/icon_grade_angle_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..5d71cbd2a03bbed8a029890923cb378fe50b6075 GIT binary patch literal 1074 zcmV-21kL-2P)Px&>`6pHRA@u(noo#ZRTRd*?(Ux3WEybPN`K? zTnLqR@-pR4lNYtP5Okpf>dJ+SN~sQFvCc~E!-(&aJb|05$8DYznH zW{koW3Vs&`e|bCFf8NUt=|=R1KGD+?w6+Ngn+W#0(XO>vF>;QSQ!~qQ`~&^)Ory`& z5HPJLyYj*Cb|JPAxT(?Ptq>=`k|Mqf=H`xRy>+qPGuH(+nmoD1pztgN;d;qh`gg$` zAcvjU(2uoz)C6WH($9c+vZX<|eR#n!CpLI^HQ9>5w4Mwug~Gd)px^EN+9BQ;oV<93 zpN@}5^4I%W5m?ljdWlej?O@)k2NJ17bnuh9z@koiCxKzFH)6!}L z_s-OVfr5IKK;4%?JAtX;#i&5wqxk;*pUW{7Fk1i7l@DHUz&3vyx?O3(oVDCNqV@f` zqO<~RB$?f%#60CTpC94{=4jI1JW&Dmnw|{bX5Eq?c(We>xb{fQTRGZVN9Icv7E5M# zNvFDMauo1r(vD1&fZ54R3?g^CChsQ!dB%xG5*!(s+Q3_tL+QL3YpuT!BD2P3ES`N# zlzGli#p2Z~jrxL7C;I|nws=kAC!Ik3#Hf>glfZp`GVax@0Kd{sWX3?*=rxI-bYje( zj5(S21=8ui8d-T_z5}cgQ2)jdTwv7693-Tr_vc-BZYos3bF>qwy&&&xDwAKtBEK<~ zOzjb2#4nzk@hLFrVjs4hFi$s=$S>MbH!1vrwl z2frysR2_m$hjP|@g2gGE&h;Mw!DVZ?d-R4wkW!WD^aHf;IsnySRw7_jK|YKh7@98g zxZ(V<)0b5jSDl00a%e1`-Yp74ey*~HM+J(IUj8^^-Fd;h2ynok&?I~Q4)xjiD-8~# zlp*bpr*HKPx-%5}4rcnS0G=1fhIXztf*13J;OFlic&PFR zzmng&z^*p7lfj%7eu5%9K(4K!-)2`)WRU?i5nP)6UhA#P_0ly2teiya>F`o$;c;cK zspZcBglDO6DtCGD_@P6O&ej99YFp8$FzTG>H73v(pz0OMdJ?ybnDuLIK0_c2q`D-6 szbU*VES$~d^QYg_kNnlB*Xp=`0JGy|3#@oF$N&HU07*qoM6N<$f>Uf0MgRZ+ literal 0 HcmV?d00001 diff --git a/live/src/main/res/mipmap-mdpi/icon_live_gift_2.png b/common/src/main/res/mipmap-xxhdpi/icon_live_gift_2.png similarity index 100% rename from live/src/main/res/mipmap-mdpi/icon_live_gift_2.png rename to common/src/main/res/mipmap-xxhdpi/icon_live_gift_2.png diff --git a/common/src/main/res/mipmap-xxhdpi/icon_right.png b/common/src/main/res/mipmap-xxhdpi/icon_right.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d1d45b0ddd70d29417d12f3e219b2fc4472167 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIDN0X`wF?gc*oaR9NuvV1^g93?@1!3+ux^Y`DcPhe{OX#f=CEbxddW?6|hVNy&naZps)ur0^H?!-=g zrX}`2`{uoQVUk!k>FBJx`9|eW>gJu-adb2ni*azAKjFhJ_Lej)h8AJfH<}B*Ju)T> zRdEWbcuY`mY+?a2LInDz7_g|^X%bpxe`t+J2=}SzSALAlEKeAjidY%L8JU2VDmXMS zFf#oUy%6NU&N%;hq^^R-f`tu6A)(Co>Nm<6yqn5lz&njWps;On<`J>JZO=}-*f88q WeVJ*qqpBU~6$VdNKbLh*2~7ZQxP#9C literal 0 HcmV?d00001 diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_what.png b/common/src/main/res/mipmap-xxhdpi/icon_what.png similarity index 100% rename from live/src/main/res/mipmap-xxxhdpi/icon_what.png rename to common/src/main/res/mipmap-xxhdpi/icon_what.png diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 6715ce5e3..898591650 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1250,4 +1250,8 @@ Limited ride And limited avatar frame %s drew %s in the lucky red envelope number >Red successfully + 升級還需%s經驗值,升至%s即可領取獎勵 + 包裹中暫無物品哦 + 恭喜,你已達到最高等級 + 自定義數量 diff --git a/config.gradle b/config.gradle index 5bba46103..e31787a93 100644 --- a/config.gradle +++ b/config.gradle @@ -9,9 +9,9 @@ ext { ] manifestPlaceholders = [ //正式、 - serverHost : "https://napi.yaoulive.com", +// serverHost : "https://napi.yaoulive.com", // 测试 -// serverHost : "https://ceshi.yaoulive.com", + serverHost : "https://ceshi.yaoulive.com", diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index c52a984e8..b786ce6f4 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -91,6 +91,7 @@ import com.yunbao.live.bean.LiveChatBean; import com.yunbao.live.dialog.LiveFansFragment; import com.yunbao.live.dialog.LiveGameDialogFragment; import com.yunbao.live.dialog.LiveGiftDialogFragment; +import com.yunbao.live.dialog.LiveGiftPopup; import com.yunbao.live.dialog.LiveHDDialogFragment; import com.yunbao.live.dialog.LiveInputDialogFragment; import com.yunbao.live.dialog.LiveMicUserDialogFragment; @@ -443,18 +444,16 @@ public class LiveAudienceActivity extends LiveActivity { */ public void openGiftWindow() { new Handler(Looper.getMainLooper()).post(() -> { + if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream)) { return; } - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - fragment.setPkStatus(isPk); - fragment.setLiveGuardInfo(mLiveGuardInfo); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - fragment.setArguments(bundle); - fragment.setOnDismissListener(dialog -> checkMsgRed()); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setPk(isPk) + .setLiveGuardInfo(mLiveGuardInfo)); }); } @@ -462,16 +461,13 @@ public class LiveAudienceActivity extends LiveActivity { if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream)) { return; } - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - fragment.setPkStatus(isPk); - fragment.setLiveGuardInfo(mLiveGuardInfo); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - bundle.putString(Constants.LIVE_WISH_GIFTID, giftId); - fragment.setArguments(bundle); - fragment.setOnDismissListener(dialog -> checkMsgRed()); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setPk(isPk) + .setLiveGuardInfo(mLiveGuardInfo) + .setmWishGiftId(giftId)); } public void openGiftWindow(String giftId, String for_by) { @@ -479,19 +475,15 @@ public class LiveAudienceActivity extends LiveActivity { return; } new Handler(Looper.getMainLooper()).post(() -> { - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - fragment.setPkStatus(isPk); - fragment.setLiveGuardInfo(mLiveGuardInfo); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - bundle.putString(Constants.LIVE_WISH_GIFTID, giftId); - if (for_by.equals("1")) { - bundle.putString("by", "1"); - } - fragment.setArguments(bundle); - fragment.setOnDismissListener(dialog -> checkMsgRed()); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setPk(isPk) + .setLiveGuardInfo(mLiveGuardInfo) + .setmWishGiftId(giftId) + .setUname("1"));//setUname==by }); } @@ -1023,18 +1015,29 @@ public class LiveAudienceActivity extends LiveActivity { break; case GIFT_POPUP: - - if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream)) { - return; - } - LiveGiftDialogFragment liveGiftDialogFragment = new LiveGiftDialogFragment(); - liveGiftDialogFragment.setPkStatus(isPk); - liveGiftDialogFragment.setLiveGuardInfo(mLiveGuardInfo); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - liveGiftDialogFragment.setArguments(bundle); - liveGiftDialogFragment.setOnDismissListener(dialog -> checkMsgRed()); - liveGiftDialogFragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + LiveGiftPopup liveGiftPopup = new LiveGiftPopup(); + bundle.putString("mLiveUid", mLiveUid); + bundle.putString("mStream", mStream); + bundle.putString("WishGiftId", event.getmWishGiftId()); + bundle.putBoolean("ContactGift", event.getIsContactGift()); + bundle.putParcelable("GuardInfo", event.getLiveGuardInfo()); + bundle.putBoolean("pk", event.isPk()); + liveGiftPopup.setArguments(bundle); + liveGiftPopup.show(getSupportFragmentManager(), "LiveGiftPopup"); +// new XPopup.Builder(mContext) +// .asCustom(new LiveGiftPopup(mContext, this)) +// .show(); +// if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream)) { +// return; +// } +// LiveGiftDialogFragment liveGiftDialogFragment = new LiveGiftDialogFragment(); +// liveGiftDialogFragment.setPkStatus(isPk); +// liveGiftDialogFragment.setLiveGuardInfo(mLiveGuardInfo); +// bundle.putString(Constants.LIVE_UID, mLiveUid); +// bundle.putString(Constants.LIVE_STREAM, mStream); +// liveGiftDialogFragment.setArguments(bundle); +// liveGiftDialogFragment.setOnDismissListener(dialog -> checkMsgRed()); +// liveGiftDialogFragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); break; case CURRENT_ACTIVITY: String type = event.getModel().getActiveId(); diff --git a/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java b/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java new file mode 100644 index 000000000..05e78fd3b --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java @@ -0,0 +1,69 @@ +package com.yunbao.live.adapter; + +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.utils.Bus; +import com.yunbao.live.R; +import com.yunbao.live.event.LiveGiftItemEvent; +import com.yunbao.live.views.FrameGiftViewHolder; + +import java.util.ArrayList; +import java.util.List; + +public class FrameGiftAdapter extends RecyclerView.Adapter { + private List giftJson = new ArrayList<>(); + private int contextLayoutGiftHeight = 0; + private String mStream, mLiveUid, wishGiftId; + + public FrameGiftAdapter(int contextLayoutGiftHeight, List giftJson, String mStream, String mLiveUid, String wishGiftId) { + this.contextLayoutGiftHeight = contextLayoutGiftHeight; + this.giftJson = giftJson; + this.mStream = mStream; + this.mLiveUid = mLiveUid; + this.wishGiftId = wishGiftId; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_frame_gift, parent, false); + return new FrameGiftViewHolder(herdView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + + if (!TextUtils.isEmpty(wishGiftId) && TextUtils.equals(giftJson.get(position).getId() + "", wishGiftId)) { + Bus.get().post(new LiveGiftItemEvent().setLiveGiftModel(giftJson.get(position))); + } + + FrameGiftViewHolder frameGiftViewHolder = (FrameGiftViewHolder) holder; + frameGiftViewHolder.showData(contextLayoutGiftHeight, giftJson.get(position)); + frameGiftViewHolder.giftSelect(giftJson.get(position), position, mStream, mLiveUid, new FrameGiftViewHolder.FrameGiftClickListener() { + @Override + public void onCallBack(int position, LiveGiftBean model) { + Bus.get().post(new LiveGiftItemEvent().setLiveGiftModel(model)); + wishGiftId = null; + } + }); + } + + public void giftSelect(LiveGiftBean model) { + for (int i = 0; i < giftJson.size(); i++) { + giftJson.get(i).setChecked(giftJson.get(i).getId() == model.getId()); + } + notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return giftJson.size(); + } +} diff --git a/live/src/main/java/com/yunbao/live/adapter/GiftTitleAdapter.java b/live/src/main/java/com/yunbao/live/adapter/GiftTitleAdapter.java new file mode 100644 index 000000000..898b9da7c --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/GiftTitleAdapter.java @@ -0,0 +1,60 @@ +package com.yunbao.live.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.live.R; +import com.yunbao.live.bean.GiftTopBean; +import com.yunbao.live.views.GiftTitleViewHolder; + +import java.util.ArrayList; +import java.util.List; + +/** + * + */ +public class GiftTitleAdapter extends RecyclerView.Adapter { + + List name = new ArrayList<>(); + private int index = 0; + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gift_top_new, parent, false); + return new GiftTitleViewHolder(herdView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + GiftTitleViewHolder itemViewHolder = (GiftTitleViewHolder) holder; + itemViewHolder.showData(name.get(position), position, new GiftTitleViewHolder.ClicksCallBack() { + @Override + public void onViewClicks(int mPosition) { + index = mPosition; + notifyDataSetChanged(); + } + }); + itemViewHolder.selectData(index == position); + } + + @Override + public int getItemCount() { + return name.size(); + } + + public void addAllData(List giftTopBeans) { + name.clear(); + name.addAll(giftTopBeans); + notifyDataSetChanged(); + } + + public void uncheck() { + index = -1; + notifyDataSetChanged(); + } +} diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveGiftFragmentPagerAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveGiftFragmentPagerAdapter.java new file mode 100644 index 000000000..934be7fc4 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/LiveGiftFragmentPagerAdapter.java @@ -0,0 +1,33 @@ +package com.yunbao.live.adapter; + +import android.content.Context; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + +import java.util.List; + +public class LiveGiftFragmentPagerAdapter extends FragmentPagerAdapter { + + private List fragmentList; + + + public LiveGiftFragmentPagerAdapter(FragmentManager fm, Context mContext, List fragmentList) { + super(fm); + + this.fragmentList = fragmentList; + + } + + @Override + public Fragment getItem(int i) { + return fragmentList.get(i); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + +} diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveParcelItemAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveParcelItemAdapter.java new file mode 100644 index 000000000..9f06c5816 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/LiveParcelItemAdapter.java @@ -0,0 +1,85 @@ +package com.yunbao.live.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.utils.Bus; +import com.yunbao.live.R; +import com.yunbao.live.event.LiveGiftItemEvent; +import com.yunbao.live.views.LiveParcelItemViewHolder; + +import java.util.ArrayList; +import java.util.List; + +public class LiveParcelItemAdapter extends RecyclerView.Adapter { + private List giftJson = new ArrayList<>(); + private int contextLayoutGiftHeight = 0; + private String mStream, mLiveUid; + + public LiveParcelItemAdapter(int contextLayoutGiftHeight, List giftJson, String mStream, String mLiveUid) { + this.contextLayoutGiftHeight = contextLayoutGiftHeight; + this.giftJson = giftJson; + this.mStream = mStream; + this.mLiveUid = mLiveUid; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_live_parcel, parent, false); + return new LiveParcelItemViewHolder(herdView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + LiveParcelItemViewHolder frameGiftViewHolder = (LiveParcelItemViewHolder) holder; + frameGiftViewHolder.showData(contextLayoutGiftHeight, giftJson.get(position)); + frameGiftViewHolder.giftSelect(giftJson.get(position), position, mStream, mLiveUid, new LiveParcelItemViewHolder.FrameGiftClickListener() { + @Override + public void onCallBack(int position, LiveGiftBean model) { + Bus.get().post(new LiveGiftItemEvent().setLiveGiftModel(model)); + } + }); + } + + public void giftSelect(LiveGiftBean model) { + for (int i = 0; i < giftJson.size(); i++) { + giftJson.get(i).setChecked(giftJson.get(i).getId() == model.getId()); + } + notifyDataSetChanged(); + } + + public void refreshWrapListAfterSend(LiveGiftBean model) { + for (int i = 0; i < giftJson.size(); i++) { + if (giftJson.get(i).getId() == model.getId()) { + + + String giftNum = giftJson.get(i).getGiftNum(); + int number = 0; + try { + number = Integer.parseInt(giftNum); + } catch (NumberFormatException e) { + e.printStackTrace(); + number = 0; + } + if (number == 1) { + + giftJson.remove(i); + } else { + giftJson.get(i).setGiftNum(String.valueOf(number - 1)); + } + } + } + notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return giftJson.size(); + } +} diff --git a/live/src/main/java/com/yunbao/live/bean/CoinModel.java b/live/src/main/java/com/yunbao/live/bean/CoinModel.java new file mode 100644 index 000000000..f80a61da8 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/bean/CoinModel.java @@ -0,0 +1,115 @@ +package com.yunbao.live.bean; + +import com.google.gson.annotations.SerializedName; +import com.yunbao.common.bean.BaseModel; + +public class CoinModel extends BaseModel { + //钻石余额 + @SerializedName("coin") + private String coin; + //金豆余额 + @SerializedName("gold") + private String gold; + + @SerializedName("uid") + private String uid; + //平台最大等级 + @SerializedName("user_level_max") + private String userLevelMax; + //当前用户等级 + @SerializedName("user_level") + private String userLevel; + //升级下一级需要的经验 + @SerializedName("user_next_level_rewards") + private String userNextLevelRewards; + //当前已经获取到的经验值 + @SerializedName("user_level_current_consumption") + private String userLevelCurrentConsumption; + //升级需要的经验值(总的) + @SerializedName("user_level_upgrades") + private String userLevelUpgrades; + //包裹红点 + @SerializedName("users_pack_red_dot") + private String usersPackRedDot; + + public String getCoin() { + return coin; + } + + public CoinModel setCoin(String coin) { + this.coin = coin; + return this; + } + + public String getGold() { + return gold; + } + + public CoinModel setGold(String gold) { + this.gold = gold; + return this; + } + + public String getUid() { + return uid; + } + + public CoinModel setUid(String uid) { + this.uid = uid; + return this; + } + + public String getUserLevelMax() { + return userLevelMax; + } + + public CoinModel setUserLevelMax(String userLevelMax) { + this.userLevelMax = userLevelMax; + return this; + } + + public String getUserLevel() { + return userLevel; + } + + public CoinModel setUserLevel(String userLevel) { + this.userLevel = userLevel; + return this; + } + + public String getUserNextLevelRewards() { + return userNextLevelRewards; + } + + public CoinModel setUserNextLevelRewards(String userNextLevelRewards) { + this.userNextLevelRewards = userNextLevelRewards; + return this; + } + + public String getUserLevelCurrentConsumption() { + return userLevelCurrentConsumption; + } + + public CoinModel setUserLevelCurrentConsumption(String userLevelCurrentConsumption) { + this.userLevelCurrentConsumption = userLevelCurrentConsumption; + return this; + } + + public String getUserLevelUpgrades() { + return userLevelUpgrades; + } + + public CoinModel setUserLevelUpgrades(String userLevelUpgrades) { + this.userLevelUpgrades = userLevelUpgrades; + return this; + } + + public String getUsersPackRedDot() { + return usersPackRedDot; + } + + public CoinModel setUsersPackRedDot(String usersPackRedDot) { + this.usersPackRedDot = usersPackRedDot; + return this; + } +} diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java b/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java new file mode 100644 index 000000000..aa1a30b53 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java @@ -0,0 +1,1100 @@ +package com.yunbao.live.dialog; + +import static com.yunbao.common.CommonAppConfig.isGetNewWrap; +import static com.yunbao.common.utils.RouteUtil.PATH_COIN; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.os.Handler; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.blankj.utilcode.util.GsonUtils; +import com.lxj.xpopup.XPopup; +import com.opensource.svgaplayer.SVGACallback; +import com.opensource.svgaplayer.SVGADrawable; +import com.opensource.svgaplayer.SVGAImageView; +import com.opensource.svgaplayer.SVGAParser; +import com.opensource.svgaplayer.SVGAVideoEntity; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; +import com.yunbao.common.R; +import com.yunbao.common.bean.BlindBoxInfoModel; +import com.yunbao.common.bean.IMLoginModel; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.bean.LiveGiftBean2; +import com.yunbao.common.bean.UserBean; +import com.yunbao.common.dialog.AbsDialogFragment; +import com.yunbao.common.event.GiftNumberEvent; +import com.yunbao.common.event.SendBlindGiftEvent; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.NobleUtil; +import com.yunbao.common.utils.SVGAViewUtils; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.views.GiftNumberPopup; +import com.yunbao.common.views.weight.MarqueeTextView; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.activity.LiveActivity; +import com.yunbao.live.activity.LiveAudienceActivity; +import com.yunbao.live.adapter.GiftTitleAdapter; +import com.yunbao.live.bean.CoinModel; +import com.yunbao.live.bean.GiftTopBean; +import com.yunbao.live.bean.LiveGuardInfo; +import com.yunbao.live.event.GiftTitleEvent; +import com.yunbao.live.event.LiveAudienceEvent; +import com.yunbao.live.event.LiveGiftDialogEvent; +import com.yunbao.live.event.LiveGiftItemEvent; +import com.yunbao.live.event.LiveParcelItemRefreshEvent; +import com.yunbao.live.http.LiveHttpUtil; +import com.yunbao.live.views.LiveGiftFragment; +import com.yunbao.live.views.LiveParcelFragment; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +/** + * 直播间新送礼弹窗 + */ +public class LiveGiftPopup extends AbsDialogFragment { + private ImageView gitBackground, nobilityIcon, description, iconArrow; + private JSONArray liveGiftList; + private TextView diamondText, goldText, liveWrap, vipGoldDesc, vipGoldTitle, giftNumber; + private RecyclerView giftTitle; + private GiftTitleAdapter giftTitleAdapter; + private FrameLayout contextLayoutGift; + private String mStream, mLiveUid; + private FrameLayout blindBox, frameBlindTop, noNobility, giftNumberLayout, giftSendLayout; + private ProgressBar progressBlind, progressBlind1, progressBlind2; + private SVGAImageView blindSvga, blindBoxOpen; + private View iconMasking; + private TextView blindNumber, textBlindProgress, textBlindGiftName, liveGiftSend, mLianText, lvStr, leaveHint; + private LinearLayout establishedNobility, levelingLayout; + private View mBtnSendGroup; + private LiveGuardInfo mLiveGuardInfo; + private static final String DEFAULT_COUNT = "1"; + private String mCount = DEFAULT_COUNT; + private String mWishGiftId; + private int isContactGift = 0; + private String by; + private boolean isWrap; + private ProgressBar progressBar; + private MarqueeTextView giftDescription; + private boolean isPk; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + Bus.getOn(this); + initView(); + initDate(); + } + + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + Bus.getOff(this); + + } + + private void initView() { + gitBackground = mRootView.findViewById(R.id.git_background2); + contextLayoutGift = mRootView.findViewById(R.id.context_layout_gift); + diamondText = mRootView.findViewById(R.id.diamond_text); + goldText = mRootView.findViewById(R.id.gold_text); + giftTitle = mRootView.findViewById(R.id.gift_title); + liveWrap = mRootView.findViewById(R.id.live_wrap); + giftDescription = mRootView.findViewById(R.id.gift_description); + blindBox = mRootView.findViewById(R.id.blind_box); + frameBlindTop = mRootView.findViewById(R.id.frame_blind_top); + progressBlind = mRootView.findViewById(R.id.progress_blind1); + progressBlind1 = mRootView.findViewById(R.id.progress_blind2); + progressBlind2 = mRootView.findViewById(R.id.progress_blind3); + iconMasking = mRootView.findViewById(R.id.icon_masking); + blindSvga = mRootView.findViewById(R.id.blind_svga); + blindBoxOpen = mRootView.findViewById(R.id.blind_box_open); + blindNumber = mRootView.findViewById(R.id.blind_number); + textBlindProgress = mRootView.findViewById(R.id.text_blind_progress); + textBlindGiftName = mRootView.findViewById(R.id.text_blind_gift_name); + noNobility = mRootView.findViewById(R.id.no_nobility); + establishedNobility = mRootView.findViewById(R.id.established_nobility); + nobilityIcon = mRootView.findViewById(R.id.nobility_icon); + vipGoldDesc = mRootView.findViewById(R.id.vipGoldDesc); + vipGoldTitle = mRootView.findViewById(R.id.vipGoldTitle); + giftNumber = mRootView.findViewById(R.id.gift_number); + liveGiftSend = mRootView.findViewById(R.id.live_gift_send); + giftNumberLayout = mRootView.findViewById(R.id.gift_number_layout); + mLianText = mRootView.findViewById(R.id.lian_text); + mBtnSendGroup = mRootView.findViewById(R.id.btn_send_lian); + giftSendLayout = mRootView.findViewById(R.id.gift_send_layout); + description = mRootView.findViewById(R.id.description); + lvStr = mRootView.findViewById(R.id.lv_str); + iconArrow = mRootView.findViewById(R.id.icon_arrow); + leaveHint = mRootView.findViewById(R.id.leave_hint); + progressBar = mRootView.findViewById(R.id.progressBar); + levelingLayout = mRootView.findViewById(R.id.leveling_layout); + //设置礼物弹窗背景 + ImgLoader.displayBlurLive(getContext(), R.drawable.backgroud_custom_gift2, gitBackground); + gitBackground.setAlpha(0.97f); + ImgLoader.display(getContext(), R.mipmap.icon_arrow_right, iconArrow); + //礼物分类tab + LinearLayoutManager manager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); + giftTitle.setLayoutManager(manager); + giftTitleAdapter = new GiftTitleAdapter(); + giftTitle.setAdapter(giftTitleAdapter); + liveWrap.setAlpha(0.5f); + liveWrap.setTypeface(Typeface.SANS_SERIF, Typeface.NORMAL); + liveGiftSend.setEnabled(false); + giftNumberLayout.setVisibility(View.INVISIBLE); + giftDescription.setVisibility(View.GONE); + levelingLayout.setVisibility(View.VISIBLE); + //点击包裹 + ViewClicksAntiShake.clicksAntiShake(liveWrap, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + giftTitleAdapter.uncheck(); + liveWrap.setAlpha(1.0f); + liveWrap.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD); + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.replace(R.id.context_layout_gift, LiveParcelFragment.newInstance(mStream, mLiveUid)); + transaction.commit(); + isWrap = true; + } + }); + //;连送 + ViewClicksAntiShake.clicksAntiShake(mBtnSendGroup, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + sendGift(); + } + }); + //送礼 + ViewClicksAntiShake.clicksAntiShake(liveGiftSend, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + sendGift(); + } + }); + // 跳转充值 + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.diamond_linear), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + forwardMyCoin(0); + } + }); + // 跳转充值 + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.gold_layout), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + forwardMyCoin(2); + } + }); + // 盲盒说明 + ViewClicksAntiShake.clicksAntiShake(description, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); + StringBuffer htmlUrl = new StringBuffer(); + htmlUrl.append(CommonAppConfig.HOST) + .append("/h5/info/index.html?uid=") + .append(userInfo.getId()) + .append("&token=") + .append(userInfo.getToken()); + Bundle bundle = new Bundle(); + bundle.putString("url", htmlUrl.toString()); + LiveHDDialogFragment fragment = new LiveHDDialogFragment(); + fragment.setArguments(bundle); + fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveHDDialogFragment"); + } + }); + // 跳转贵族 + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.btn_luck_gift_tip), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + dismiss(); + ((LiveActivity) mContext).openLuckGiftTip(); + } + }); + //用户等级 + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.leveling_layout), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); + StringBuffer htmlUrl = new StringBuffer(); + htmlUrl.append(CommonAppConfig.HOST) + .append("/h5/Grade/index.html?uid=") + .append(userInfo.getId()) + .append("&token=") + .append(userInfo.getToken()) + .append("&for"); + Bundle bundle = new Bundle(); + bundle.putString("url", htmlUrl.toString()); + LiveHDDialogFragment fragment = new LiveHDDialogFragment(); + fragment.setArguments(bundle); + fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveHDDialogFragment"); + } + }); + //选择礼物数量 + ViewClicksAntiShake.clicksAntiShake(giftNumberLayout, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (liveGiftModel.getType() == 7) return; + new XPopup.Builder(getContext()) + .asCustom(new GiftNumberPopup(getContext())) + .show(); + ImgLoader.display(getContext(), R.mipmap.icon_arrow_down, iconArrow); + } + }); + } + + private void initDate() { + Bundle bundle = getArguments(); + if (bundle != null) { + mLiveUid = bundle.getString("mLiveUid"); + mStream = bundle.getString("mStream"); + mLiveGuardInfo = bundle.getParcelable("GuardInfo"); + mWishGiftId = bundle.getString("WishGiftId"); + isContactGift = bundle.getBoolean("ContactGift", false) ? 1 : 0; + by = bundle.getString("by"); + isPk = bundle.getBoolean("pk"); + } + + //判断是否缓存礼物列表 + String giftListJson = CommonAppConfig.getInstance().getGiftListJson(); + if (!TextUtils.isEmpty(giftListJson)) { + try { + liveGiftList = JSON.parseArray(giftListJson); + Bus.getOn(this); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (liveGiftList == null) { + LiveHttpUtil.getNewGiftList(new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + liveGiftList = obj.getJSONArray("listarray"); + CommonAppConfig.getInstance().setGiftListJson(obj.getString("listarray")); + getCoin(); + goldText.setText(obj.getString("gold")); + diamondText.setText(obj.getString("coin")); + setTitleData(); + + } + } + + @Override + public void onFinish() { +// if (mLoading != null) { +// mLoading.setVisibility(View.INVISIBLE); +// } + } + }); + } else { + getCoin(); + setTitleData(); + } + getBlindBoxInfo(); + loadUserVip(); + } + + //设置礼物类别数据 + private void setTitleData() { + List name = new ArrayList<>(); + for (int i = 0; i < liveGiftList.size(); i++) { + JSONObject data = liveGiftList.getJSONObject(i); + GiftTopBean giftTopBean = new GiftTopBean(); + giftTopBean.setName(data.getString("name")); + name.add(giftTopBean); + } + giftTitleAdapter.addAllData(name); + if (!TextUtils.isEmpty(mWishGiftId) && liveGiftList.size() > 0) { + for (int i = 0; i < liveGiftList.size(); i++) { + JSONObject data = liveGiftList.getJSONObject(i); + String giftJson = data.getString("giftlist"); + List liveGiftBeans = JSONArray.parseArray(giftJson, LiveGiftBean.class); + for (LiveGiftBean model : liveGiftBeans) { + if (TextUtils.equals(model.getId() + "", mWishGiftId)) { + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.replace(R.id.context_layout_gift, LiveGiftFragment.newInstance(giftJson, + liveGiftList.getJSONObject(i).getString("name"), + mStream, mLiveUid, mWishGiftId)); + transaction.commit(); + } + } + } + } else { + + JSONObject obj2 = liveGiftList.getJSONObject(0); + String giftJson = obj2.getString("giftlist"); + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.replace(R.id.context_layout_gift, LiveGiftFragment.newInstance(giftJson, + liveGiftList.getJSONObject(0).getString("name"), + mStream, mLiveUid, mWishGiftId)); + transaction.commit(); + } + + + } + + /** + * 设置贵族状态 + */ + private void loadUserVip() { + HttpClient.getInstance().get("User.getBaseInfos", "getBaseInfo") + .params("uid", IMLoginManager.get(mContext).getUserInfo().getId()) + .params("token", IMLoginManager.get(mContext).getUserInfo().getToken()) + .execute(new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject user = JSONObject.parseObject(info[0]); + int nobleId = user.getIntValue("noble_id"); + int resId = NobleUtil.nobleIdToImageResId(nobleId); + if (resId != -1) { + nobilityIcon.setImageResource(resId); + vipGoldTitle.setText(user.getString("noble_name")); + vipGoldDesc.setText(com.yunbao.live.R.string.live_gift_buy_gold_desc_to); + noNobility.setVisibility(View.GONE); + establishedNobility.setVisibility(View.VISIBLE); + } else { + noNobility.setVisibility(View.VISIBLE); + establishedNobility.setVisibility(View.GONE); + + } + } + } + }); + } + + /** + * 获取砖石和金豆余额 + */ + private void getCoin() { + LiveHttpUtil.getCoin(new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + if (!TextUtils.isEmpty(info[0])) { + CoinModel coinModel = GsonUtils.fromJson(info[0], CoinModel.class); + goldText.setText(coinModel.getGold()); + diamondText.setText(coinModel.getCoin()); + lvStr.setText("Lv." + coinModel.getUserLevel()); + int nextLeve = Integer.parseInt(coinModel.getUserLevel()); + int maxLeve = Integer.parseInt(coinModel.getUserLevelMax()); + if (maxLeve > nextLeve) { + String leveNext = String.valueOf(nextLeve + 1); + String userNextLevel = coinModel.getUserNextLevelRewards(); + String hint = String.format(getString(R.string.leveling_points), + userNextLevel, leveNext); + int leveNextIndexOf = hint.indexOf(leveNext); + int leveNextSize = leveNext.length(); + int userNextLevelIndexOf = msg.indexOf(userNextLevel); + int userNextLevelSize = userNextLevel.length(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + builder.append(msg); + builder.setSpan(new + ForegroundColorSpan(Color.parseColor("#FFC722")), + leveNextIndexOf, leveNextIndexOf + leveNextSize, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + builder.setSpan(new + ForegroundColorSpan(Color.parseColor("#FFC722")), + userNextLevelIndexOf, userNextLevelIndexOf + userNextLevelSize, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + leaveHint.setText(builder); + } else { + String hint = getString(R.string.reach_the_top); + leaveHint.setText(hint); + progressBar.setMax(10); + progressBar.setProgress(10); + } + + } + + + } + } + }); + } + + /** + * 赠送礼物 + */ + public void sendGift() { + if (liveGiftModel == null) return; + if (liveGiftModel.getTag() != null) { + if (mCount.equals("1")) { + LiveHttpUtil.setFrontTask("sendgift", mLiveUid, new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + EventBus.getDefault().post("stop_svga_new_user_gif"); + EventBus.getDefault().post("stop_new_user_gif"); + if (code == 0) { + EventBus.getDefault().post("stop_new_user_gif1"); + } + dismiss(); + } + }); + } else { + ToastUtil.show(com.yunbao.live.R.string.only_one); + } + } else { + if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream) || liveGiftModel == null) { + return; + } + if (mLiveGuardInfo != null) { + if (liveGiftModel.getMark() == LiveGiftBean2.MARK_GUARD && mLiveGuardInfo.getMyGuardType() != Constants.GUARD_TYPE_YEAR) { + ToastUtil.show(com.yunbao.live.R.string.guard_gift_tip); + return; + } + } + SendGiftCallback callback = new SendGiftCallback(liveGiftModel); + try { + if (!StringUtil.isEmpty(mWishGiftId) && liveGiftModel.getId() != Integer.parseInt(mWishGiftId)) { + isContactGift = 0; + } + } catch (NumberFormatException e) { + isContactGift = 0; + } + if (by != null) { + LiveHttpUtil.sendGift("1", mLiveUid, mStream, liveGiftModel.getId(), mCount, isContactGift, callback); + } else { + LiveHttpUtil.sendGift("0", mLiveUid, mStream, liveGiftModel.getId(), mCount, isContactGift, callback); + } + } + } + + /** + * 跳转到我的钻石 + */ + private void forwardMyCoin(int page) { + dismiss(); + //我们的 + ARouter.getInstance().build(PATH_COIN).withInt("p", page).navigation(); + } + + //连送逻辑 + private int mLianCountDownCount;//连送倒计时的数字 + + private Handler lianSongHandler = new Handler(); + private Runnable lianSongRunnable = new Runnable() { + @Override + public void run() { + if (removeRunnable) { + lianSongHandler.removeCallbacks(lianSongRunnable); + if (mLianText != null) { + mLianText.setText("5s"); + } + mLianCountDownCount = 5; + lianSongHandler.postDelayed(lianSongRunnable, 1000); + removeRunnable = false; + } else { + mLianCountDownCount--; + if (mLianCountDownCount == 0) { + hideLianBtn(); + } else { + if (mLianText != null) { + mLianText.setText(mLianCountDownCount + "s"); + lianSongHandler.postDelayed(lianSongRunnable, 1000); + } + } + } + + } + }; + + /** + * 显示连送按钮 + */ + private boolean mShowLianBtn = false; + private boolean removeRunnable = false; + + private void showLianBtn() { + + + if (mShowLianBtn) { + removeRunnable = true; + } else { + if (mLianText != null) { + mLianText.setText("5s"); + } + mLianCountDownCount = 5; + lianSongHandler.postDelayed(lianSongRunnable, 1000); + mBtnSendGroup.setVisibility(View.VISIBLE); + giftSendLayout.setVisibility(View.INVISIBLE); + mShowLianBtn = true; + } + + + } + + /** + * 隐藏连送按钮 包裹 + */ + private void hideLianBtn() { + mBtnSendGroup.setVisibility(View.INVISIBLE); + giftSendLayout.setVisibility(View.VISIBLE); + lianSongHandler.removeCallbacks(lianSongRunnable); + mShowLianBtn = false; + } + + /** + * 关于点击礼物分类的通知 + */ + @Subscribe(threadMode = ThreadMode.MAIN) + public void onGiftTitleEvent(GiftTitleEvent event) { + liveWrap.setAlpha(0.5f); + liveWrap.setTypeface(Typeface.SANS_SERIF, Typeface.NORMAL); + liveGiftSend.setEnabled(false); + giftNumberLayout.setVisibility(View.INVISIBLE); + JSONObject obj2 = liveGiftList.getJSONObject(event.getmPosition()); + String giftJson = obj2.getString("giftlist"); + + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + transaction.replace(R.id.context_layout_gift, LiveGiftFragment.newInstance(giftJson, event.getGiftTitle(), mStream, mLiveUid, mWishGiftId)); + transaction.commit(); + isWrap = false; + if (giftSendLayout.getVisibility() == View.INVISIBLE) { + hideLianBtn(); + } + mCount = DEFAULT_COUNT; + giftNumber.setText(mCount); + giftDescription.setVisibility(View.GONE); + levelingLayout.setVisibility(View.VISIBLE); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onGiftNumberEvent(GiftNumberEvent event) { + if (TextUtils.equals(event.getmCount(), "-1")) { + + } else { + mCount = event.getmCount(); + giftNumber.setText(mCount); + } + + } + + /** + * 选中的礼物数据 + * + * @param event + */ + private LiveGiftBean liveGiftModel = null; + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLiveGiftItemEvent(LiveGiftItemEvent event) { + + liveGiftModel = event.getLiveGiftModel(); + if (liveGiftModel.getType() == 7) { + showBlindProgress(liveGiftModel.getBlind_box_type()); + } else { + blindBox.setVisibility(View.INVISIBLE); + mCount = DEFAULT_COUNT; + giftNumber.setText(mCount); + } + liveGiftSend.setEnabled(true); + giftNumberLayout.setVisibility(View.VISIBLE); + mCount = DEFAULT_COUNT; + giftNumber.setText(mCount); + if (giftSendLayout.getVisibility() == View.INVISIBLE) { + hideLianBtn(); + } + if (TextUtils.isEmpty(liveGiftModel.getGiftDescription())) { + giftDescription.setVisibility(View.GONE); + levelingLayout.setVisibility(View.VISIBLE); + } else { + giftDescription.setText(liveGiftModel.getGiftDescription()); + giftDescription.setVisibility(View.VISIBLE); + levelingLayout.setVisibility(View.GONE); + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLiveGiftDialogEvent(LiveGiftDialogEvent event) { + dismiss(); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onSendBlindGiftEvent(SendBlindGiftEvent event) { + if (!TextUtils.equals(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId()), event.getUid())) + return; + BlindBoxInfoModel model = null; + for (int i = 0; i < blindBoxInfoModels.size(); i++) { + if (TextUtils.equals(blindBoxInfoModels.get(i).getBlindBoxType(), event.getBoxType())) { + blindBoxInfoModels.get(i).setDressThresholdValue(event.getDressThresholdValue()); + blindBoxInfoModels.get(i).setThresholdValue(event.getThresholdValue()); + model = blindBoxInfoModels.get(i); + } + } + + long userID = IMLoginManager.get(mContext).getUserInfo().getId(); + String boxBlindName; + try { + if (!blindBoxOpen.isAnimating()) { + new SVGAParser(mContext).parse(new URL(model.getBlindBoxSwf()), new SVGAParser.ParseCompletion() { + @Override + public void onComplete(SVGAVideoEntity videoItem) { + blindBoxOpen.setVisibility(View.VISIBLE); + SVGADrawable drawable = new SVGADrawable(videoItem); + blindBoxOpen.setImageDrawable(drawable); + blindBoxOpen.setLoops(1); + blindBoxOpen.startAnimation(); + + } + + @Override + public void onError() { + } + }); + + blindBoxOpen.setCallback(new SVGACallback() { + @Override + public void onPause() { + } + + @Override + public void onFinished() { + blindBoxOpen.clear(); + blindBoxOpen.setVisibility(View.GONE); + Log.e("礼物盲盒", "结束播放"); + } + + @Override + public void onRepeat() { + } + + @Override + public void onStep(int i, double v) { + Log.e("礼物盲盒", "onStep: frame " + i + " percentage " + v); + } + }); + } + + } catch (MalformedURLException e) { + e.printStackTrace(); + } + //判断送礼用户更新送礼用户进度 + if (TextUtils.equals(String.valueOf(userID), event.getUid()) && blindBoxType == Integer.parseInt(event.getBoxType())) { + switch (blindBoxType) { + case 1: + boxBlindName = mContext.getString(R.string.mini_blind_box); + + progressBlind.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind.setProgress(Integer.parseInt(model.getDressThresholdValue())); + break; + case 2: + boxBlindName = mContext.getString(R.string.collection_blind_box); + + progressBlind1.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind1.setProgress(Integer.parseInt(model.getDressThresholdValue())); + + break; + default: + boxBlindName = mContext.getString(R.string.pd_blind_box); + progressBlind2.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind2.setProgress(Integer.parseInt(model.getDressThresholdValue())); + break; + } + //进度下方提示语 + if (TextUtils.equals(model.getThresholdValue(), model.getDressThresholdValue())) { + String individualDressing = mContext.getString(R.string.individual_dressing); + String msg = mContext.getString(R.string.have_already_win); + msg = String.format(msg, model.getThresholdDressName()); + int dressNameIndexOf = msg.indexOf(model.getThresholdDressName()); + int individualDressingIndexOf = msg.indexOf(String.valueOf(individualDressing)); + int dressNameSize = model.getThresholdDressName().length(); + int individualDressingSize = String.valueOf(individualDressing).length(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + builder.append(msg); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), dressNameIndexOf, dressNameIndexOf + dressNameSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), individualDressingIndexOf, individualDressingIndexOf + individualDressingSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + blindNumber.setText(builder); + textBlindProgress.setText(R.string.get_it_done); + } else { + int progress = Integer.parseInt(model.getThresholdValue()) - Integer.parseInt(model.getDressThresholdValue()); + String msg = mContext.getString(R.string.resend_win); + msg = String.format(msg, String.valueOf(progress), model.getThresholdDressName()); + int dressNameIndexOf = msg.indexOf(model.getThresholdDressName()); + int progressIndexOf = msg.indexOf(String.valueOf(progress)); + int dressNameSize = model.getThresholdDressName().length(); + int progressSize = String.valueOf(progress).length(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + builder.append(msg); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), dressNameIndexOf, dressNameIndexOf + dressNameSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), progressIndexOf, progressIndexOf + progressSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + blindNumber.setText(builder); + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(model.getDressThresholdValue()) + .append("/") + .append(model.getThresholdValue()); + textBlindProgress.setText(stringBuffer.toString()); + float maskingAlpha = (float) progress / Float.parseFloat(model.getThresholdValue()); + iconMasking.setAlpha(maskingAlpha); + } + if (stringBuilders.size() == 0) { + boxBlindHandler.postDelayed(boxBlindRunnable, 1500); + } + if (!TextUtils.isEmpty(event.getDressName()) && !TextUtils.isEmpty(event.getDressMsg())) { + SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); + String boxBlindMsg = String.format(mContext.getString(R.string.random_availability2), event.getGiftname(), event.getDressName()); + stringBuilder.append(boxBlindMsg); + int dressNameIndex = boxBlindMsg.indexOf(event.getDressName()); + int dressNameSize = event.getDressName().length(); + int giftNameIndex = boxBlindMsg.indexOf(event.getGiftname()); + int giftNameSize = event.getGiftname().length(); + stringBuilder.setSpan(new ForegroundColorSpan(Color.parseColor(event.getDressColour())), + dressNameIndex, + dressNameIndex + dressNameSize, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + stringBuilder.setSpan(new ForegroundColorSpan(Color.parseColor(event.getGiftColour())), + giftNameIndex, + giftNameIndex + giftNameSize, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + stringBuilders.add(stringBuilder); + } else { + SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); + String boxBlindMsg = String.format(mContext.getString(R.string.random_availability3), event.getGiftname()); + stringBuilder.append(boxBlindMsg); + int giftNameIndex = boxBlindMsg.indexOf(event.getGiftname()); + int giftNameSize = event.getGiftname().length(); + stringBuilder.setSpan(new ForegroundColorSpan(Color.parseColor(event.getGiftColour())), + giftNameIndex, + giftNameIndex + giftNameSize, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + stringBuilders.add(stringBuilder); + + } + + + } + } + + private List stringBuilders = new ArrayList<>(); + private Handler boxBlindHandler = new Handler(); + private Runnable boxBlindRunnable = new Runnable() { + @Override + public void run() { + if (stringBuilders != null && stringBuilders.size() > 0) { + SpannableStringBuilder stringBuilder = stringBuilders.get(0); + textBlindGiftName.setText(stringBuilder); + boxBlindHandler.postDelayed(boxBlindRunnable, 1500); + stringBuilders.remove(0); + } else { + textBlindGiftName.setText(String.format(mContext.getString(R.string.random_availability), blindGiftNamesBuffer.toString())); + } + } + }; + public List blindBoxInfoModels = new ArrayList<>(); + + private void getBlindBoxInfo() { + LiveNetManager.get(mContext) + .getBlindBoxInfo(new com.yunbao.common.http.base.HttpCallback>() { + @Override + public void onSuccess(List data) { + blindBoxInfoModels = data; + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + } + + /** + * 展示当前盲盒礼物进度 + * + * @param blindBoxType + */ + private StringBuffer blindGiftNamesBuffer = null; + private int blindBoxType; + + private void showBlindProgress(int blindBoxType) { + this.blindBoxType = blindBoxType; + blindGiftNamesBuffer = new StringBuffer(); + BlindBoxInfoModel model = null; + for (BlindBoxInfoModel boxInfoModel : blindBoxInfoModels) { + if (TextUtils.equals(String.valueOf(blindBoxType), boxInfoModel.getBlindBoxType())) { + model = boxInfoModel; + } + } + if (model == null) return; + blindBoxOpen.clear(); + blindBoxOpen.setVisibility(View.GONE); + try { + blindSvga.clear(); + new SVGAParser(mContext).parse(new URL(model.getThresholdEffectSrc()), new SVGAParser.ParseCompletion() { + @Override + public void onComplete(SVGAVideoEntity videoItem) { + SVGADrawable drawable = new SVGADrawable(videoItem); + blindSvga.setImageDrawable(drawable); + SVGAViewUtils.playEndClear(blindSvga, false); + + } + + @Override + public void onError() { + Log.e("errqs", "errl"); + } + }); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + blindBox.setVisibility(View.VISIBLE); + String boxBlindName = ""; + switch (blindBoxType) { + case 1: + boxBlindName = mContext.getString(R.string.mini_blind_box); + progressBlind.setVisibility(View.VISIBLE); + progressBlind1.setVisibility(View.GONE); + progressBlind2.setVisibility(View.GONE); + frameBlindTop.setBackgroundResource(com.yunbao.live.R.mipmap.bg_kirin); + iconMasking.setBackgroundResource(com.yunbao.live.R.mipmap.icon_masking_kirin); + progressBlind.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind.setProgress(Integer.parseInt(model.getDressThresholdValue())); + textBlindProgress.setTextColor(Color.parseColor("#047771")); + break; + case 2: + boxBlindName = mContext.getString(com.yunbao.live.R.string.collection_blind_box); + progressBlind.setVisibility(View.GONE); + progressBlind1.setVisibility(View.VISIBLE); + progressBlind2.setVisibility(View.GONE); + frameBlindTop.setBackgroundResource(com.yunbao.live.R.mipmap.bg_phoenix); + iconMasking.setBackgroundResource(com.yunbao.live.R.mipmap.icon_masking_phoenix); + progressBlind1.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind1.setProgress(Integer.parseInt(model.getDressThresholdValue())); + textBlindProgress.setTextColor(Color.parseColor("#6D2E0F")); + + break; + default: + boxBlindName = mContext.getString(com.yunbao.live.R.string.pd_blind_box); + progressBlind.setVisibility(View.GONE); + progressBlind1.setVisibility(View.GONE); + progressBlind2.setVisibility(View.VISIBLE); + frameBlindTop.setBackgroundResource(com.yunbao.live.R.mipmap.bg_dragon); + iconMasking.setBackgroundResource(com.yunbao.live.R.mipmap.icon_masking_dragon); + progressBlind2.setMax(Integer.parseInt(model.getThresholdValue())); + progressBlind2.setProgress(Integer.parseInt(model.getDressThresholdValue())); + textBlindProgress.setTextColor(Color.parseColor("#905E01")); + break; + } + + //进度下方提示语 + if (TextUtils.equals(model.getThresholdValue(), model.getDressThresholdValue())) { + String individualDressing = mContext.getString(com.yunbao.live.R.string.individual_dressing); + String msg = mContext.getString(com.yunbao.live.R.string.have_already_win); + msg = String.format(msg, model.getThresholdDressName()); + int dressNameIndexOf = msg.indexOf(model.getThresholdDressName()); + int individualDressingIndexOf = msg.indexOf(String.valueOf(individualDressing)); + int dressNameSize = model.getThresholdDressName().length(); + int individualDressingSize = String.valueOf(individualDressing).length(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + builder.append(msg); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), dressNameIndexOf, dressNameIndexOf + dressNameSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), individualDressingIndexOf, individualDressingIndexOf + individualDressingSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + blindNumber.setText(builder); + iconMasking.setAlpha(0.f); + } else { + int progress = Integer.parseInt(model.getThresholdValue()) - Integer.parseInt(model.getDressThresholdValue()); + String msg = mContext.getString(com.yunbao.live.R.string.resend_win); + msg = String.format(msg, String.valueOf(progress), model.getThresholdDressName()); + int dressNameIndexOf = msg.indexOf(model.getThresholdDressName()); + int progressIndexOf = msg.indexOf(String.valueOf(progress)); + int dressNameSize = model.getThresholdDressName().length(); + int progressSize = String.valueOf(progress).length(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + builder.append(msg); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), dressNameIndexOf, dressNameIndexOf + dressNameSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FFF682")), progressIndexOf, progressIndexOf + progressSize, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + blindNumber.setText(builder); + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(model.getDressThresholdValue()) + .append("/") + .append(model.getThresholdValue()); + textBlindProgress.setText(stringBuffer.toString()); + float maskingAlpha = (float) progress / Float.parseFloat(model.getThresholdValue()); + iconMasking.setAlpha(maskingAlpha); + } + //盲盒礼物文字跑马灯 + for (int i = 0; i < model.getItemName().size(); i++) { + blindGiftNamesBuffer + .append(model.getItemName().get(i)); + + if (i != model.getItemName().size() - 1) { + blindGiftNamesBuffer.append(","); + } + } + textBlindGiftName.setText(String.format(mContext.getString(com.yunbao.live.R.string.random_availability), blindGiftNamesBuffer.toString())); + + } + + // 返回自定义弹窗的布局 + @Override + protected int getLayoutId() { + return R.layout.dialog_live_gift_popup; + } + + @Override + protected int getDialogStyle() { + return R.style.dialog2; + } + + @Override + protected boolean canCancel() { + return true; + } + + @Override + protected void setWindowAttributes(Window window) { + window.setWindowAnimations(R.style.bottomToTopAnim); + window.setDimAmount(0f);//去掉遮罩层(全透明) + WindowManager.LayoutParams params = window.getAttributes(); + params.width = WindowManager.LayoutParams.MATCH_PARENT; + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + params.gravity = Gravity.BOTTOM; + window.setAttributes(params); + } + + private class SendGiftCallback extends HttpCallback { + + private LiveGiftBean mGiftBean; + + public SendGiftCallback(LiveGiftBean giftBean) { + mGiftBean = giftBean; + } + + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0) { + if (mGiftBean.getSwf().contains("svga")) { + dismiss(); + } + if (info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + String coin = obj.getString("coin"); + String goldCoin = obj.getString("gold"); + UserBean u = CommonAppConfig.getInstance().getUserBean(); + if (u != null) { + u.setLevel(obj.getIntValue("level")); + //送礼物后更新粉丝徽章等级 + u.setMedalLevel(obj.getIntValue("medal_level")); + u.setMedalName(obj.getString("medal_name")); + u.setCoin(coin); + } + if (diamondText != null) { + diamondText.setText(coin); + } + if (goldText != null) { + goldText.setText(goldCoin); + } + if (mGiftBean.getType() == LiveGiftBean2.TYPE_NORMAL && !mGiftBean.getSwf().contains("svga")) { + showLianBtn(); + } + if (mGiftBean.getType() == 7) { + showLianBtn(); + } +// //刷新包裹列表wrap_gift_num -1:表示数量没有变化 +// mObjGiftSendback = obj; + isGetNewWrap = true; + if (isWrap) { + Bus.get().post(new LiveParcelItemRefreshEvent().setLiveGiftModel(liveGiftModel)); + } + } + } else if (code == 1007 && mGiftBean.getType() != 0) { + hideLianBtn(); + dismiss(); + LiveAudienceEvent.LiveAudienceType type = null; + String confirmString = mContext.getString(com.yunbao.live.R.string.dialog_fount_submit); + String tips = msg; + switch (mGiftBean.getType()) { + case 1: + type = LiveAudienceEvent.LiveAudienceType.NOBLE; + tips = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_noble); + confirmString = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_open_noble); + break; + case 2: + type = LiveAudienceEvent.LiveAudienceType.GUARD; + tips = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_guard); + confirmString = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_open_guard); + break; + case 3: + type = LiveAudienceEvent.LiveAudienceType.FAN_CLUB; + tips = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_fans); + confirmString = mContext.getString(com.yunbao.live.R.string.dialog_live_gift_open_fans); + } + LiveAudienceEvent.LiveAudienceType finalType = type; + new DialogUitl.Builder(mContext) + .setView(com.yunbao.live.R.layout.dialog_live_unfollow) + .setConfirmString(confirmString) + .setContent(tips) + .setClickCallback((dialog, content) -> { + LiveAudienceEvent event = new LiveAudienceEvent() + .setType(finalType); + if (finalType == LiveAudienceEvent.LiveAudienceType.GUARD) { + event = event.setObject(""); + } + Bus.get().post(event); + }).build().show(); + + AppManager.runDebugCode(() -> { + Log.i("gifBean", mGiftBean.toString()); + }); + } else if (code == 1001) { + hideLianBtn(); + new DialogUitl.Builder(mContext) + .setView(com.yunbao.live.R.layout.dialog_live_unfollow) + .setConfirmString(getString(com.yunbao.live.R.string.charge)) + .setContent(getString(com.yunbao.live.R.string.insufficient_balance)) + .setClickCallback(new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + forwardMyCoin(0); + } + }).build().show(); + } else { + hideLianBtn(); + ToastUtil.show(msg); + } + } + } + +} diff --git a/live/src/main/java/com/yunbao/live/event/GiftTitleEvent.java b/live/src/main/java/com/yunbao/live/event/GiftTitleEvent.java new file mode 100644 index 000000000..2330d2e8e --- /dev/null +++ b/live/src/main/java/com/yunbao/live/event/GiftTitleEvent.java @@ -0,0 +1,26 @@ +package com.yunbao.live.event; + +import com.yunbao.common.bean.BaseModel; + +public class GiftTitleEvent extends BaseModel { + private String giftTitle; + private int mPosition; + + public int getmPosition() { + return mPosition; + } + + public GiftTitleEvent setmPosition(int mPosition) { + this.mPosition = mPosition; + return this; + } + + public String getGiftTitle() { + return giftTitle; + } + + public GiftTitleEvent setGiftTitle(String giftTitle) { + this.giftTitle = giftTitle; + return this; + } +} diff --git a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java index 712463b10..7c62ecdf4 100644 --- a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java +++ b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java @@ -14,6 +14,7 @@ import com.yunbao.common.bean.WishModel; import com.yunbao.common.bean.XydCompleteModel; import com.yunbao.common.event.AllServerNotifyEvent; import com.yunbao.common.event.CustomFullServiceNotifyEvent; +import com.yunbao.live.bean.LiveGuardInfo; import com.yunbao.live.bean.LivePKUserListBean; import com.yunbao.live.bean.LiveReceiveGiftBean; import com.yunbao.live.bean.OpenParametersModel; @@ -49,6 +50,75 @@ public class LiveAudienceEvent extends BaseModel { private RedPacketModel redPacketModel; private RedPacketInfoModel redPacketInfoModel; private OlineUserlistModel olineUserlistModel; + private LiveGuardInfo liveGuardInfo; + private String mWishGiftId; + private boolean isContactGift; + private boolean isPk; + public String mStream; + public String mLiveUid,giftId; + + public String getGiftId() { + return giftId; + } + + public LiveAudienceEvent setGiftId(String giftId) { + this.giftId = giftId; + return this; + } + + public String getmStream() { + return mStream; + } + + public LiveAudienceEvent setmStream(String mStream) { + this.mStream = mStream; + return this; + } + + public String getmLiveUid() { + return mLiveUid; + } + + public LiveAudienceEvent setmLiveUid(String mLiveUid) { + this.mLiveUid = mLiveUid; + return this; + } + + public boolean isPk() { + return isPk; + } + + public LiveAudienceEvent setPk(boolean pk) { + isPk = pk; + return this; + } + + public boolean getIsContactGift() { + return isContactGift; + } + + public LiveAudienceEvent setIsContactGift(boolean isContactGift) { + this.isContactGift = isContactGift; + return this; + } + + public String getmWishGiftId() { + return mWishGiftId; + } + + public LiveAudienceEvent setmWishGiftId(String mWishGiftId) { + this.mWishGiftId = mWishGiftId; + return this; + } + + public LiveGuardInfo getLiveGuardInfo() { + return liveGuardInfo; + } + + public LiveAudienceEvent setLiveGuardInfo(LiveGuardInfo liveGuardInfo) { + this.liveGuardInfo = liveGuardInfo; + return this; + } public OlineUserlistModel getOlineUserlistModel() { return olineUserlistModel; diff --git a/live/src/main/java/com/yunbao/live/event/LiveGiftItemEvent.java b/live/src/main/java/com/yunbao/live/event/LiveGiftItemEvent.java new file mode 100644 index 000000000..92aeb97b6 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/event/LiveGiftItemEvent.java @@ -0,0 +1,20 @@ +package com.yunbao.live.event; + +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.LiveGiftBean; + +/** + * 选中的礼物 + */ +public class LiveGiftItemEvent extends BaseModel { + private LiveGiftBean liveGiftModel; + + public LiveGiftBean getLiveGiftModel() { + return liveGiftModel; + } + + public LiveGiftItemEvent setLiveGiftModel(LiveGiftBean liveGiftModel) { + this.liveGiftModel = liveGiftModel; + return this; + } +} diff --git a/live/src/main/java/com/yunbao/live/event/LiveParcelItemRefreshEvent.java b/live/src/main/java/com/yunbao/live/event/LiveParcelItemRefreshEvent.java new file mode 100644 index 000000000..db6797e23 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/event/LiveParcelItemRefreshEvent.java @@ -0,0 +1,17 @@ +package com.yunbao.live.event; + +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.LiveGiftBean; + +public class LiveParcelItemRefreshEvent extends BaseModel { + private LiveGiftBean liveGiftModel; + + public LiveGiftBean getLiveGiftModel() { + return liveGiftModel; + } + + public LiveParcelItemRefreshEvent setLiveGiftModel(LiveGiftBean liveGiftModel) { + this.liveGiftModel = liveGiftModel; + return this; + } +} diff --git a/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java b/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java index 214e22522..9f1937601 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java @@ -6,7 +6,6 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.drawable.Drawable; -import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.os.Message; @@ -46,6 +45,7 @@ import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.GiftCacheUtil; import com.yunbao.common.utils.HtmlTagHandler; @@ -53,12 +53,11 @@ import com.yunbao.common.utils.L; import com.yunbao.common.utils.MicStatusManager; import com.yunbao.common.utils.ToastUtil; import com.yunbao.live.R; -import com.yunbao.live.activity.LiveAudienceActivity; import com.yunbao.live.bean.LiveGiftPrizePoolWinBean; import com.yunbao.live.bean.LiveLuckGiftWinBean; import com.yunbao.live.bean.LiveReceiveGiftBean; import com.yunbao.live.custom.FrameImageView; -import com.yunbao.live.dialog.LiveGiftDialogFragment; +import com.yunbao.live.event.LiveAudienceEvent; import com.yunbao.live.event.LiveRoomChangeEvent; import com.yunbao.live.http.LiveHttpUtil; import com.yunbao.live.utils.AllMsgTextRender; @@ -339,14 +338,12 @@ public class LiveGiftAnimPresenter { new Handler().postDelayed(new Runnable() { @Override public void run() { - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - bundle.putString(Constants.LIVE_WISH_GIFTID, blindBox.getEvent().getBlindBoxId() + ""); - bundle.putBoolean("isContactGift", true); - fragment.setArguments(bundle); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setmWishGiftId(blindBox.getEvent().getBlindBoxId() + "") + .setIsContactGift(true)); } }, 1000); } else { diff --git a/live/src/main/java/com/yunbao/live/views/FrameGiftViewHolder.java b/live/src/main/java/com/yunbao/live/views/FrameGiftViewHolder.java new file mode 100644 index 000000000..709767b88 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/FrameGiftViewHolder.java @@ -0,0 +1,158 @@ +package com.yunbao.live.views; + +import android.content.Context; +import android.graphics.Color; +import android.util.TypedValue; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.view.animation.ScaleAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.CommonCallback; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.GiftCacheUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.R; +import com.yunbao.live.dialog.SendRendPacketPopup; +import com.yunbao.live.event.LiveGiftDialogEvent; + +import java.io.File; + +public class FrameGiftViewHolder extends RecyclerView.ViewHolder { + private ImageView giftIcon, mPayIco, cornerMark; + private Context mContext; + private TextView giftName, mPrice; + private RelativeLayout giftLayout; + private ScaleAnimation mAnimation; + private LinearLayout mLoadingLayout; + private ImageView mLoading; + + public FrameGiftViewHolder(@NonNull View itemView) { + super(itemView); + mContext = itemView.getContext(); + giftIcon = itemView.findViewById(R.id.gift_icon); + giftName = itemView.findViewById(R.id.gift_name); + mPayIco = itemView.findViewById(R.id.pay_ico); + mPrice = itemView.findViewById(R.id.price); + cornerMark = itemView.findViewById(R.id.corner_mark); + giftLayout = itemView.findViewById(R.id.gift_layout); + mLoadingLayout = itemView.findViewById(R.id.gift_loading_layout); + mLoading = itemView.findViewById(R.id.gift_loading); + + mAnimation = new ScaleAnimation(0.9f, 1.1f, 0.9f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + mAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); + mAnimation.setDuration(400); + mAnimation.setRepeatMode(Animation.REVERSE); + mAnimation.setRepeatCount(-1); + } + + public void showData(int contextLayoutGiftHeight, LiveGiftBean model) { + //设置高度 + itemView.post(new Runnable() { + @Override + public void run() { + GridLayoutManager.LayoutParams linearParams = (GridLayoutManager.LayoutParams) itemView.getLayoutParams(); + linearParams.height = contextLayoutGiftHeight / 2; + itemView.setLayoutParams(linearParams); + } + }); + giftLayout.setSelected(model.isChecked()); + if (model.isChecked()) { + giftIcon.startAnimation(mAnimation); + } + ImgLoader.display(mContext, model.getIcon(), giftIcon); + ImgLoader.display(mContext, model.getCornerMark(), cornerMark); + giftName.setText(model.getName()); + //特殊礼物红包 + if (model.getType() == 9999999) { + mPayIco.setVisibility(View.GONE); + mPrice.setText(mContext.getString(R.string.build_up_popularity)); + mPrice.setTextColor(Color.parseColor("#db8c4a")); + mPrice.setTextSize(TypedValue.COMPLEX_UNIT_SP, 8); + + } else { + mPrice.setTextSize(TypedValue.COMPLEX_UNIT_SP, 11); + mPrice.setTextColor(Color.parseColor("#c8c8c8")); + mPayIco.setVisibility(View.VISIBLE); + //普通礼物 + if (model.getSendType() != null && model.getSendType().equals("1")) { + mPayIco.setImageResource(R.mipmap.gold_coin); + } else { + mPayIco.setImageResource(R.mipmap.diamond); + } + mPrice.setText(model.getPrice()); + } + if (model.getSwf() != null && model.getSwf().isEmpty()) { + mLoadingLayout.setVisibility(View.GONE); + } else { + mLoadingLayout.setVisibility(GiftCacheUtil.checkGiftIsDownload(model.getId()) ? View.GONE : View.VISIBLE); + } + + + } + + public void giftSelect(LiveGiftBean model, int position, String mStream, String mLiveUid, FrameGiftClickListener frameGiftClickListener) { + ViewClicksAntiShake.clicksAntiShake(mLoadingLayout, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + mLoading.setImageResource(R.mipmap.icon_loading_gift); + Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.anim_loading_gift); + animation.setRepeatMode(Animation.RESTART); + animation.setRepeatCount(Animation.INFINITE); + animation.setInterpolator(new LinearInterpolator()); + mLoading.startAnimation(animation); + GiftCacheUtil.getInstance().pause(); + GiftCacheUtil.getInstance().downloadGiftForId(mContext, model, new CommonCallback() { + @Override + public void callback(File bean) { + if (bean == null) { + ToastUtil.show(mContext.getString(R.string.load_failure_2)); + mLoading.setImageResource(R.mipmap.icon_download_gift); + animation.setRepeatCount(0); + animation.setDuration(0); + animation.cancel(); + mLoading.setAnimation(animation); + } else { + mLoadingLayout.setVisibility(View.GONE); + } + GiftCacheUtil.getInstance().restart(); + } + }); + } + }); + ViewClicksAntiShake.clicksAntiShake(giftLayout, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (model.getType() == 9999999) { + Bus.get().post(new LiveGiftDialogEvent()); + new XPopup.Builder(mContext) + .asCustom(new SendRendPacketPopup(mContext, mLiveUid)) + .show(); + } else { + if (frameGiftClickListener != null) { + frameGiftClickListener.onCallBack(position, model); + } + } + + } + }); + } + + public interface FrameGiftClickListener { + void onCallBack(int position, LiveGiftBean model); + } +} diff --git a/live/src/main/java/com/yunbao/live/views/GiftTitleViewHolder.java b/live/src/main/java/com/yunbao/live/views/GiftTitleViewHolder.java new file mode 100644 index 000000000..d0732f450 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/GiftTitleViewHolder.java @@ -0,0 +1,50 @@ +package com.yunbao.live.views; + +import android.graphics.Typeface; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.custom.DrawableTextView; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.R; +import com.yunbao.live.bean.GiftTopBean; +import com.yunbao.live.event.GiftTitleEvent; + +public class GiftTitleViewHolder extends RecyclerView.ViewHolder { + private DrawableTextView name; + + public GiftTitleViewHolder(@NonNull View itemView) { + super(itemView); + name = itemView.findViewById(R.id.name); + } + + public void showData(GiftTopBean giftTopBean, int mPosition, ClicksCallBack callBack) { + name.setText(giftTopBean.getName()); + ViewClicksAntiShake.clicksAntiShake(itemView, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (callBack != null) { + callBack.onViewClicks(mPosition); + Bus.get().post(new GiftTitleEvent().setmPosition(mPosition).setGiftTitle(giftTopBean.getName())); + } + } + }); + } + + public void selectData(boolean isSelect) { + if (isSelect) { + name.setAlpha(1.0f); + name.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD); + } else { + name.setAlpha(0.5f); + name.setTypeface(Typeface.SANS_SERIF, Typeface.NORMAL); + } + } + + public interface ClicksCallBack { + void onViewClicks(int mPosition); + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveAudienceViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveAudienceViewHolder.java index 8d8267731..f613222ae 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveAudienceViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveAudienceViewHolder.java @@ -10,7 +10,6 @@ import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; -import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; @@ -20,16 +19,12 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ViewFlipper; import androidx.fragment.app.FragmentActivity; -import com.opensource.svgaplayer.SVGADrawable; -import com.opensource.svgaplayer.SVGAImageView; -import com.opensource.svgaplayer.SVGAParser; -import com.opensource.svgaplayer.SVGAVideoEntity; +import com.lxj.xpopup.XPopup; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.bean.NewPeopleInfo; @@ -39,11 +34,10 @@ import com.yunbao.common.http.API; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; import com.yunbao.common.utils.Bus; -import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.ProcessResultUtil; -import com.yunbao.common.utils.SVGAViewUtils; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.live.dialog.LiveGiftPopup; import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; import com.yunbao.live.activity.LiveActivity; @@ -200,6 +194,7 @@ public class LiveAudienceViewHolder extends AbsLiveViewHolder { ViewClicksAntiShake.clicksAntiShake(giftImage, new ViewClicksAntiShake.ViewClicksCallBack() { @Override public void onViewClicks() { + Bus.get().post(new LiveAudienceEvent() .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP)); } @@ -382,6 +377,7 @@ public class LiveAudienceViewHolder extends AbsLiveViewHolder { } else if (i == R.id.btn_gift) { openGiftWindow(); + //全屏 } else if (i == R.id.btn_more) { ((LiveActivity) mContext).openMoreWindow(); diff --git a/live/src/main/java/com/yunbao/live/views/LiveGiftFragment.java b/live/src/main/java/com/yunbao/live/views/LiveGiftFragment.java new file mode 100644 index 000000000..6c6103bee --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/LiveGiftFragment.java @@ -0,0 +1,149 @@ +package com.yunbao.live.views; + +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.alibaba.fastjson.JSON; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.fragment.BaseFragment; +import com.yunbao.live.R; +import com.yunbao.live.adapter.LiveGiftFragmentPagerAdapter; + +import java.util.ArrayList; +import java.util.List; + +/** + * 礼物列表 + */ +public class LiveGiftFragment extends BaseFragment { + private ViewPager fragmentViewpager; + private int pageCount; + private static final int GIFT_COUNT = 8;//每页8个礼物 + private RadioGroup mRadioGroup; + private LiveGiftFragmentPagerAdapter giftFragmentPagerAdapter; + private ArrayList ViewList = new ArrayList<>(); //页卡视图集合 + private List giftJson = new ArrayList<>(); + private int contextLayoutGiftHeight = 0; + private String mStream, mLiveUid, wishGiftId, type; + private int currentPage = 0; + + @Override + public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup) { + return layoutInflater.inflate(R.layout.fragment_live_gift, viewGroup, false); + } + + @Override + protected void initVariables(Bundle bundle) { + giftJson = JSON.parseArray(bundle.getString("giftJson"), LiveGiftBean.class); + contextLayoutGiftHeight = bundle.getInt("contextLayoutGiftHeight"); + mStream = bundle.getString("mStream"); + wishGiftId = bundle.getString("wishGiftId"); + mLiveUid = bundle.getString("mLiveUid"); + type = bundle.getString("type"); + pageCount = giftJson.size() / GIFT_COUNT; + if (giftJson.size() % GIFT_COUNT > 0) { + pageCount++; + } + + + } + + @Override + protected void initViews(Bundle savedInstanceState, View contentView) { + + fragmentViewpager = contentView.findViewById(R.id.context_layout); + mRadioGroup = contentView.findViewById(R.id.radio_group); + + + fragmentViewpager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + contextLayoutGiftHeight = fragmentViewpager.getHeight(); + Log.e("giftJson", "height=" + contextLayoutGiftHeight); + int fromIndex = 0; + int size = giftJson.size(); + for (int i = 0; i < pageCount; i++) { + int endIndex = fromIndex + GIFT_COUNT; + if (endIndex > size) { + endIndex = size; + } + List liveGiftBeans = new ArrayList<>(); + for (int j = fromIndex; j < endIndex; j++) { + LiveGiftBean bean = giftJson.get(j); + bean.setPage(i); + liveGiftBeans.add(bean); + if (!TextUtils.isEmpty(wishGiftId) && TextUtils.equals(bean.getId() + "", wishGiftId)) { + currentPage = i; + Log.e("LiveGiftItemFragment", type); + } + } + fromIndex = endIndex; + ViewList.add(LiveGiftItemFragment.newInstance(JSON.toJSONString(liveGiftBeans), contextLayoutGiftHeight, mStream, mLiveUid, wishGiftId)); + } + giftFragmentPagerAdapter = new LiveGiftFragmentPagerAdapter(getChildFragmentManager(), getActivity(), ViewList); + fragmentViewpager.setAdapter(giftFragmentPagerAdapter); + + LayoutInflater inflater = LayoutInflater.from(getContext()); + for (int i = 0, size2 = ViewList.size(); i < size2; i++) { + RadioButton radioButton = (RadioButton) inflater.inflate(R.layout.view_gift_indicator, mRadioGroup, false); + radioButton.setId(i + 10000); + if (i == 0) { + radioButton.setChecked(true); + } + mRadioGroup.addView(radioButton); + + } + fragmentViewpager.setCurrentItem(currentPage); + //移除监听 + fragmentViewpager.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); + + fragmentViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + if (mRadioGroup != null && mRadioGroup.getChildAt(position) != null) { + ((RadioButton) mRadioGroup.getChildAt(position)).setChecked(true); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + @Override + protected void loadData() { + + } + + public static LiveGiftFragment newInstance(String giftJson, String type, + String mStream, String mLiveUid, String wishGiftId) { + LiveGiftFragment liveGiftFragment = new LiveGiftFragment(); + Bundle bundle = new Bundle(); + bundle.putString("giftJson", giftJson); + bundle.putString("type", type); + bundle.putString("mStream", mStream); + bundle.putString("mLiveUid", mLiveUid); + bundle.putString("wishGiftId", wishGiftId); + liveGiftFragment.setArguments(bundle); + return liveGiftFragment; + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java b/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java new file mode 100644 index 000000000..f2de5474c --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java @@ -0,0 +1,82 @@ +package com.yunbao.live.views; + +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.fastjson.JSON; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.fragment.BaseFragment; +import com.yunbao.common.utils.Bus; +import com.yunbao.live.R; +import com.yunbao.live.adapter.FrameGiftAdapter; +import com.yunbao.live.event.LiveGiftItemEvent; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.ArrayList; +import java.util.List; + +public class LiveGiftItemFragment extends BaseFragment { + private List giftJson = new ArrayList<>(); + private RecyclerView frameGiftList; + private int contextLayoutGiftHeight = 0; + private FrameGiftAdapter frameGiftAdapter; + private String mStream, mLiveUid, wishGiftId; + + @Override + public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup) { + return layoutInflater.inflate(R.layout.fragment_live_gift_item, viewGroup, false); + } + + @Override + protected void initVariables(Bundle bundle) { + giftJson = JSON.parseArray(bundle.getString("giftJson"), LiveGiftBean.class); + contextLayoutGiftHeight = bundle.getInt("contextLayoutGiftHeight"); + mStream = bundle.getString("mStream"); + mLiveUid = bundle.getString("mLiveUid"); + wishGiftId = bundle.getString("wishGiftId"); + Log.e("giftJson", giftJson.toString()); + } + + @Override + protected void initViews(Bundle savedInstanceState, View contentView) { + + + frameGiftList = contentView.findViewById(R.id.frame_gift_list); + frameGiftList.setHasFixedSize(true); + frameGiftList.setLayoutManager(new GridLayoutManager(getActivity(), 4, GridLayoutManager.VERTICAL, false)); + frameGiftAdapter = new FrameGiftAdapter(contextLayoutGiftHeight, giftJson, mStream, mLiveUid, wishGiftId); + frameGiftList.setAdapter(frameGiftAdapter); + } + + @Override + protected void loadData() { + + } + + public static LiveGiftItemFragment newInstance(String giftJson, int contextLayoutGiftHeight, + String mStream, String mLiveUid, String wishGiftId) { + LiveGiftItemFragment liveGiftFragment = new LiveGiftItemFragment(); + Bundle bundle = new Bundle(); + bundle.putString("giftJson", giftJson); + bundle.putInt("contextLayoutGiftHeight", contextLayoutGiftHeight); + bundle.putString("mStream", mStream); + bundle.putString("mLiveUid", mLiveUid); + bundle.putString("wishGiftId", wishGiftId); + liveGiftFragment.setArguments(bundle); + return liveGiftFragment; + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLiveGiftItemEvent(LiveGiftItemEvent event) { + frameGiftAdapter.giftSelect(event.getLiveGiftModel()); + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveParcelFragment.java b/live/src/main/java/com/yunbao/live/views/LiveParcelFragment.java new file mode 100644 index 000000000..3fbbbf257 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/LiveParcelFragment.java @@ -0,0 +1,162 @@ +package com.yunbao.live.views; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.fragment.BaseFragment; +import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.utils.GiftCacheUtil; +import com.yunbao.live.R; +import com.yunbao.live.adapter.LiveGiftFragmentPagerAdapter; +import com.yunbao.live.http.LiveHttpUtil; + +import java.util.ArrayList; +import java.util.List; + +public class LiveParcelFragment extends BaseFragment { + private ViewPager fragmentViewpager; + private int pageCount; + private static final int GIFT_COUNT = 8;//每页8个礼物 + private RadioGroup mRadioGroup; + private LiveGiftFragmentPagerAdapter giftFragmentPagerAdapter; + private ArrayList ViewList = new ArrayList<>(); //页卡视图集合 + private List giftJson = new ArrayList<>(); + private int contextLayoutGiftHeight = 0; + private String mStream, mLiveUid; + private LinearLayout parcelDataList, parcelDataNo; + + @Override + public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup) { + return layoutInflater.inflate(R.layout.fragment_live_parcel, viewGroup, false); + } + + @Override + protected void initVariables(Bundle bundle) { + mStream = bundle.getString("mStream"); + mLiveUid = bundle.getString("mLiveUid"); + } + + @Override + protected void initViews(Bundle savedInstanceState, View contentView) { + fragmentViewpager = contentView.findViewById(R.id.context_layout); + mRadioGroup = contentView.findViewById(R.id.radio_group); + parcelDataList = contentView.findViewById(R.id.parcel_data_list); + parcelDataNo = contentView.findViewById(R.id.parcel_data_no); + + fragmentViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + if (mRadioGroup != null && mRadioGroup.getChildAt(position) != null) { + ((RadioButton) mRadioGroup.getChildAt(position)).setChecked(true); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + @Override + protected void loadData() { + LiveHttpUtil.getWrapList(new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + String giftJson = obj.getString("giftlist"); + List list = JSON.parseArray(giftJson, LiveGiftBean.class); + GiftCacheUtil.getInstance().addDownloadList(list); + if (!GiftCacheUtil.getInstance().isDownloading()) { + GiftCacheUtil.getInstance().downloadAllGift(); + } + if (list.size() == 0) { + parcelDataNo.setVisibility(View.VISIBLE); + parcelDataList.setVisibility(View.GONE); + } else { + parcelDataList.setVisibility(View.VISIBLE); + parcelDataNo.setVisibility(View.GONE); + pageCount = list.size() / GIFT_COUNT; + if (list.size() % GIFT_COUNT > 0) { + pageCount++; + } + + fragmentViewpager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + contextLayoutGiftHeight = fragmentViewpager.getHeight(); + Log.e("giftJson", "height=" + contextLayoutGiftHeight); + int fromIndex = 0; + int size = list.size(); + for (int i = 0; i < pageCount; i++) { + int endIndex = fromIndex + GIFT_COUNT; + if (endIndex > size) { + endIndex = size; + } + List liveGiftBeans = new ArrayList<>(); + for (int j = fromIndex; j < endIndex; j++) { + LiveGiftBean bean = list.get(j); + bean.setPage(i); + liveGiftBeans.add(bean); + } + fromIndex = endIndex; + ViewList.add(LiveParcelItemFragment.newInstance(JSON.toJSONString(liveGiftBeans), contextLayoutGiftHeight, mStream, mLiveUid)); + } + giftFragmentPagerAdapter = new LiveGiftFragmentPagerAdapter(getChildFragmentManager(), getActivity(), ViewList); + fragmentViewpager.setAdapter(giftFragmentPagerAdapter); + + LayoutInflater inflater = LayoutInflater.from(getContext()); + for (int i = 0, size2 = ViewList.size(); i < size2; i++) { + RadioButton radioButton = (RadioButton) inflater.inflate(R.layout.view_gift_indicator, mRadioGroup, false); + radioButton.setId(i + 10000); + if (i == 0) { + radioButton.setChecked(true); + } + mRadioGroup.addView(radioButton); + + } + //移除监听 + fragmentViewpager.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); + } + } + } + + @Override + public void onFinish() { +// if (mLoading != null) { +// mLoading.setVisibility(View.INVISIBLE); +// } + } + }); + } + + public static LiveParcelFragment newInstance(String mStream, String mLiveUid) { + LiveParcelFragment liveParcelFragment = new LiveParcelFragment(); + Bundle bundle = new Bundle(); + bundle.putString("mStream", mStream); + bundle.putString("mLiveUid", mLiveUid); + liveParcelFragment.setArguments(bundle); + return liveParcelFragment; + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveParcelItemFragment.java b/live/src/main/java/com/yunbao/live/views/LiveParcelItemFragment.java new file mode 100644 index 000000000..7127f6753 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/LiveParcelItemFragment.java @@ -0,0 +1,82 @@ +package com.yunbao.live.views; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.fastjson.JSON; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.fragment.BaseFragment; +import com.yunbao.live.R; +import com.yunbao.live.adapter.LiveParcelItemAdapter; +import com.yunbao.live.event.LiveGiftItemEvent; +import com.yunbao.live.event.LiveParcelItemRefreshEvent; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.ArrayList; +import java.util.List; + +public class LiveParcelItemFragment extends BaseFragment { + private List giftJson = new ArrayList<>(); + private RecyclerView frameGiftList; + private int contextLayoutGiftHeight = 0; + private LiveParcelItemAdapter frameGiftAdapter; + private String mStream, mLiveUid; + + @Override + public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup) { + return layoutInflater.inflate(R.layout.fragment_live_gift_item, viewGroup, false); + } + + @Override + protected void initVariables(Bundle bundle) { + giftJson = JSON.parseArray(bundle.getString("giftJson"), LiveGiftBean.class); + contextLayoutGiftHeight = bundle.getInt("contextLayoutGiftHeight"); + mStream = bundle.getString("mStream"); + mLiveUid = bundle.getString("mLiveUid"); + Log.e("giftJson", giftJson.toString()); + } + + @Override + protected void initViews(Bundle savedInstanceState, View contentView) { + + frameGiftList = contentView.findViewById(R.id.frame_gift_list); + frameGiftList.setHasFixedSize(true); + frameGiftList.setLayoutManager(new GridLayoutManager(getActivity(), 4, GridLayoutManager.VERTICAL, false)); + frameGiftAdapter = new LiveParcelItemAdapter(contextLayoutGiftHeight, giftJson, mStream, mLiveUid); + frameGiftList.setAdapter(frameGiftAdapter); + } + + @Override + protected void loadData() { + + } + + public static LiveParcelItemFragment newInstance(String giftJson, int contextLayoutGiftHeight, String mStream, String mLiveUid) { + LiveParcelItemFragment liveGiftFragment = new LiveParcelItemFragment(); + Bundle bundle = new Bundle(); + bundle.putString("giftJson", giftJson); + bundle.putInt("contextLayoutGiftHeight", contextLayoutGiftHeight); + bundle.putString("mStream", mStream); + bundle.putString("mLiveUid", mLiveUid); + liveGiftFragment.setArguments(bundle); + return liveGiftFragment; + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLiveGiftItemEvent(LiveGiftItemEvent event) { + frameGiftAdapter.giftSelect(event.getLiveGiftModel()); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLiveParcelItemRefreshEvent(LiveParcelItemRefreshEvent event) { + frameGiftAdapter.refreshWrapListAfterSend(event.getLiveGiftModel()); + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveParcelItemViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveParcelItemViewHolder.java new file mode 100644 index 000000000..a94d35354 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/LiveParcelItemViewHolder.java @@ -0,0 +1,138 @@ +package com.yunbao.live.views; + +import android.content.Context; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.view.animation.ScaleAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.CommonCallback; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.GiftCacheUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.R; +import com.yunbao.live.dialog.SendRendPacketPopup; +import com.yunbao.live.event.LiveGiftDialogEvent; + +import java.io.File; + +public class LiveParcelItemViewHolder extends RecyclerView.ViewHolder { + private ImageView giftIcon, cornerMark; + private Context mContext; + private TextView giftName, mPrice, giftNumber; + private RelativeLayout giftLayout; + private ScaleAnimation mAnimation; + private LinearLayout mLoadingLayout; + private ImageView mLoading; + + public LiveParcelItemViewHolder(@NonNull View itemView) { + super(itemView); + mContext = itemView.getContext(); + giftIcon = itemView.findViewById(R.id.gift_icon); + giftName = itemView.findViewById(R.id.gift_name); + mPrice = itemView.findViewById(R.id.price); + giftLayout = itemView.findViewById(R.id.gift_layout); + giftNumber = itemView.findViewById(R.id.gift_number); + cornerMark = itemView.findViewById(R.id.corner_mark); + mLoadingLayout = itemView.findViewById(R.id.gift_loading_layout); + mLoading = itemView.findViewById(R.id.gift_loading); + + mAnimation = new ScaleAnimation(0.9f, 1.1f, 0.9f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + mAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); + mAnimation.setDuration(400); + mAnimation.setRepeatMode(Animation.REVERSE); + mAnimation.setRepeatCount(-1); + } + + public void showData(int contextLayoutGiftHeight, LiveGiftBean model) { + //设置高度 + itemView.post(new Runnable() { + @Override + public void run() { + GridLayoutManager.LayoutParams linearParams = (GridLayoutManager.LayoutParams) itemView.getLayoutParams(); + linearParams.height = contextLayoutGiftHeight / 2; + itemView.setLayoutParams(linearParams); + } + }); + giftLayout.setSelected(model.isChecked()); + if (model.isChecked()) { + giftIcon.startAnimation(mAnimation); + } + ImgLoader.display(mContext, model.getIcon(), giftIcon); + ImgLoader.display(mContext, model.getCornerMark(), cornerMark); + giftName.setText(model.getName()); + mPrice.setText(model.getEnd_time()); + giftNumber.setText(model.getGiftNum()); + + if (model.getSwf() != null && model.getSwf().isEmpty()) { + mLoadingLayout.setVisibility(View.GONE); + } else { + mLoadingLayout.setVisibility(GiftCacheUtil.checkGiftIsDownload(model.getId()) ? View.GONE : View.VISIBLE); + } + } + + public void giftSelect(LiveGiftBean model, int position, String mStream, String mLiveUid, FrameGiftClickListener frameGiftClickListener) { + ViewClicksAntiShake.clicksAntiShake(mLoadingLayout, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + mLoading.setImageResource(R.mipmap.icon_loading_gift); + Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.anim_loading_gift); + animation.setRepeatMode(Animation.RESTART); + animation.setRepeatCount(Animation.INFINITE); + animation.setInterpolator(new LinearInterpolator()); + mLoading.startAnimation(animation); + GiftCacheUtil.getInstance().pause(); + GiftCacheUtil.getInstance().downloadGiftForId(mContext, model, new CommonCallback() { + @Override + public void callback(File bean) { + if (bean == null) { + ToastUtil.show(mContext.getString(R.string.load_failure_2)); + mLoading.setImageResource(R.mipmap.icon_download_gift); + animation.setRepeatCount(0); + animation.setDuration(0); + animation.cancel(); + mLoading.setAnimation(animation); + } else { + mLoadingLayout.setVisibility(View.GONE); + } + GiftCacheUtil.getInstance().restart(); + } + }); + } + }); + ViewClicksAntiShake.clicksAntiShake(giftLayout, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (model.getType() == 9999999) { + Bus.get().post(new LiveGiftDialogEvent()); + new XPopup.Builder(mContext) + .asCustom(new SendRendPacketPopup(mContext, mLiveUid)) + .show(); + } else { + if (frameGiftClickListener != null) { + frameGiftClickListener.onCallBack(position, model); + } + } + + } + }); + } + + public interface FrameGiftClickListener { + void onCallBack(int position, LiveGiftBean model); + } +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index d191a0f3b..00f2fd4df 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -150,7 +150,6 @@ import com.yunbao.live.custom.TopGradual; import com.yunbao.live.dialog.LiveFaceUnityDialogFragment; import com.yunbao.live.dialog.LiveFansMedalDialogFragment; import com.yunbao.live.dialog.LiveGameDialogFragment; -import com.yunbao.live.dialog.LiveGiftDialogFragment; import com.yunbao.live.dialog.LiveHDDialogFragment; import com.yunbao.live.dialog.LiveUserAnchorMailBoxWebInfoPopDialog; import com.yunbao.live.dialog.LiveUserDialogFragment; @@ -5069,23 +5068,13 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis @Override public void onSuccess(LiveAnchorCallMeModel data) { - if (data.getIsGet() == 1) { - new LiveUserAnchorMailBoxWebInfoPopDialog(mContext, mAnchorName, data.getLink()) - .setOnDismissListener(dialog -> loading.dismiss()) - .showDialog(); - return; - } - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - fragment.setOnDismissListener(dialog -> checkNewLetter() - ); - fragment.setOnShowListener(dialog -> mHandler.postDelayed(loading::dismiss, 500)); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - bundle.putString(Constants.LIVE_WISH_GIFTID, data.getGiftId() + ""); - bundle.putBoolean("isContactGift", true); - fragment.setArguments(bundle); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + loading.dismiss(); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setmWishGiftId(data.getGiftId() + "") + .setIsContactGift(true)); } @Override @@ -5147,23 +5136,15 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis @Override public void onSuccess(LiveAnchorCallMeModel data) { - if (data.getIsGet() == 1) { - new LiveUserAnchorMailBoxWebInfoPopDialog(mContext, mAnchorName, data.getLink()) - .setOnDismissListener(dialog -> loading.dismiss()) - .showDialog(); - return; - } - LiveGiftDialogFragment fragment = new LiveGiftDialogFragment(); - fragment.setOnDismissListener(dialog -> checkNewLetter() - ); - fragment.setOnShowListener(dialog -> mHandler.postDelayed(loading::dismiss, 500)); - Bundle bundle = new Bundle(); - bundle.putString(Constants.LIVE_UID, mLiveUid); - bundle.putString(Constants.LIVE_STREAM, mStream); - bundle.putString(Constants.LIVE_WISH_GIFTID, data.getGiftId() + ""); - bundle.putBoolean("isContactGift", true); - fragment.setArguments(bundle); - fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveGiftDialogFragment"); + loading.dismiss(); + + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP) + .setmLiveUid(mLiveUid) + .setmStream(mStream) + .setmWishGiftId(data.getGiftId() + "") + .setIsContactGift(true)); + } @Override diff --git a/live/src/main/res/drawable/background_gift_select.xml b/live/src/main/res/drawable/background_gift_select.xml new file mode 100644 index 000000000..8e8881c7c --- /dev/null +++ b/live/src/main/res/drawable/background_gift_select.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/fragment_live_gift.xml b/live/src/main/res/layout/fragment_live_gift.xml new file mode 100644 index 000000000..4cbba9e43 --- /dev/null +++ b/live/src/main/res/layout/fragment_live_gift.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/fragment_live_gift_item.xml b/live/src/main/res/layout/fragment_live_gift_item.xml new file mode 100644 index 000000000..d2fae8429 --- /dev/null +++ b/live/src/main/res/layout/fragment_live_gift_item.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/fragment_live_parcel.xml b/live/src/main/res/layout/fragment_live_parcel.xml new file mode 100644 index 000000000..915d8ecfa --- /dev/null +++ b/live/src/main/res/layout/fragment_live_parcel.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_frame_gift.xml b/live/src/main/res/layout/item_frame_gift.xml new file mode 100644 index 000000000..b43e18e44 --- /dev/null +++ b/live/src/main/res/layout/item_frame_gift.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_gift_top_new.xml b/live/src/main/res/layout/item_gift_top_new.xml new file mode 100644 index 000000000..68309d5a7 --- /dev/null +++ b/live/src/main/res/layout/item_gift_top_new.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_live_parcel.xml b/live/src/main/res/layout/item_live_parcel.xml new file mode 100644 index 000000000..c0ff90185 --- /dev/null +++ b/live/src/main/res/layout/item_live_parcel.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/mipmap-xxxhdpi/live_icon_leftt_sliding.png b/live/src/main/res/mipmap-xxxhdpi/live_icon_leftt_sliding.png index 1789eab28a14be7eed62d6e58740e2ea1e426841..ca957ec23b294a0edcb8d6aef0f28be08a556769 100644 GIT binary patch delta 241 zcmX@j^pt5rO+9CUM`SSr1K(i~W;~w1B87p0VZWz~V@Srmw>J&B4h0CbJPh5yFL+Qn z;u*)ZYnm!cmoBYnNpG>-<`!>r;GYtQ@n1gq+q%-{`Y*@b{1at0>F3gUmW@q!LoPTs zxN%&NWm?k4sKT`)(4mo`RKOtUz&!?L9)kl=;$N2NhNcD!X9peu0g(+WSYx9KD#VxM zFFr4HxusVjG0th;2GfHq!afEtLa4=w^Jnxbp-=s*W?l$za&Y=5vATtcD~{#UhB=sYg~8L+&t;ucLK6TiZD7g( delta 215 zcmV;|04V?E0?PuBe1E!0L_t(&-tE~j3Ib6KMbUi0UPc6$VCfPpt)~#nDJ{h%d`HN# zbzpP>|Dqt=*C!m(JrZGlo9@Qu*O@0WzsOexuwXYW=pi6S2*?KnWUd$>lLGD(P$3}q z5HM1}L4W`O0t5&UAV7eCe+4WdATAIPX9x%iD6m*W9AP*598j^Du%Y#=(0UbH2@)ho zkRU;V1PKx(G!QB!w0EhQ(Eg|@^ilOD1SGVVv6)Z<5(cnfdYSft(p|%RBTvYf>S!AE Rv5Wu!002ovPDHLkV1g@FR5t(s