涂鸦礼物消息协议修改

This commit is contained in:
huangjian
2022-08-22 17:12:50 +08:00
parent cd79f0ec3a
commit 41c57647ba
23 changed files with 222 additions and 108 deletions

View File

@@ -689,7 +689,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
msg: String?,
isKnap: Boolean,
isWholdMic: Boolean,
drawFixedArray: List<HashMap<String, String>>,
drawFixedArray: List<List<Int>>,
callback: SenGiftCallback
) {
val targetUids: MutableList<Long> = ArrayList()
@@ -697,14 +697,22 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
targetUids.add(micMemberInfos[i].account.toLong())
}
GiftModel.get()
.sendRoomGift(giftInfo.giftId, targetUids, number, msg, isKnap, isWholdMic,drawFixedArray)
.sendRoomGift(
giftInfo.giftId,
targetUids,
number,
msg,
isKnap,
isWholdMic,
drawFixedArray
)
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.doOnError {
if (it is VipLevelNotEnoughException) {
dialogManager.showOkDialog("尚未达到赠送${giftInfo.giftName}所需贵族等级,所需贵族等级:${giftInfo.giftVipInfo?.vipName}")
}
}
.subscribe { throwable, _ ->
.subscribe { _, throwable ->
if (throwable != null) {
callback.onFail()
} else {

View File

@@ -100,7 +100,6 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
private Keyframe[] keyTrans;
private SvgaObjectPool mMagicViewPool;
private volatile Hashtable<Integer, MonsterAttackInfo> currentAnimationMap = new Hashtable<>();
private DrawGiftHelper drawGiftHelper;
public GiftV2View(Context context) {
@@ -282,12 +281,6 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
targetUsers.add(giftReceiver);
}
GiftReceiveInfo giftReceiveInfo = giftReceiveInfos.get(0);
if (giftReceiveInfo.getDrawFixedArray() != null) {
if (drawGiftHelper == null) {
drawGiftHelper = new DrawGiftHelper((Activity) context);
}
drawGiftHelper.prepareShowDrawGift(giftReceiveInfo.getDrawFixedArray(), false);
}
GiftInfo giftInfo = giftReceiveInfo.getGift();
if (totalCoin >= 520 || (giftInfo != null && giftInfo.isHasEffect())) {
Message msg = Message.obtain();

View File

@@ -1,6 +1,7 @@
package com.yizhuan.erban.avroom.widget
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.text.Layout
@@ -33,6 +34,7 @@ import com.yizhuan.erban.ui.utils.isDestroyed
import com.yizhuan.erban.ui.utils.load
import com.yizhuan.erban.ui.utils.loadAnim
import com.yizhuan.erban.ui.widget.SimpleAnimListener
import com.yizhuan.erban.ui.widget.drawgift.DrawGiftHelper
import com.yizhuan.erban.utils.SpannableBuilder
import com.yizhuan.xchat_android_constants.XChatConstants
import com.yizhuan.xchat_android_core.auth.AuthModel
@@ -120,6 +122,9 @@ class RoomEffectView @JvmOverloads constructor(
private var isHideCarEffect = false
private val drawGiftHelper: DrawGiftHelper by lazy { DrawGiftHelper(context as Activity) }
private fun loopCarAnim() {
if (context.isDestroyed()) return
isSvgaPlaying = false
@@ -181,6 +186,16 @@ class RoomEffectView @JvmOverloads constructor(
RoomEvent.ROOM_CAR_EFFECT_SHOW -> {
isHideCarEffect = false
}
RoomEvent.DRAW_GIFT_EFFECT -> {
val drawGiftAttachment =
(roomEvent.chatRoomMessage?.attachment as? DrawGiftAttachment)
?: return@subscribe
drawGiftHelper.prepareShowDrawGift(
drawGiftAttachment.giftId,
drawGiftAttachment.drawFixedArray,
false
)
}
else -> {}
}
}

View File

@@ -11,7 +11,7 @@ import java.util.List;
public class OnGiftDialogBtnClickListenerWrapper implements GiftDialog.OnGiftDialogBtnClickListener {
@Override
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<HashMap<String, String>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<List<Integer>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
}

View File

@@ -55,7 +55,7 @@ public class GiftAction extends BaseAction implements GiftDialog.OnGiftDialogBtn
@SuppressLint("CheckResult")
@Override
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isknap, boolean isWholeMic, List<HashMap<String, String>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isknap, boolean isWholeMic, List<List<Integer>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
if (giftInfo == null) return;
GiftModel.get().sendPersonalGift(giftInfo.getGiftId(), micMemberInfos.get(0).getAccount(), number, msg, isknap)
.doOnError(throwable -> {

View File

@@ -993,6 +993,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
if (sendGiftButton == null) return;
sendGiftButton.setText("赠送");
sendGiftButton.setEnabled(true);
clearDrawGift();
}
@Override
@@ -1025,6 +1026,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
if (sendGiftButton == null) return;
sendGiftButton.setText("赠送");
sendGiftButton.setEnabled(true);
clearDrawGift();
}
@Override
@@ -1059,6 +1061,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
if (sendGiftButton == null) return;
sendGiftButton.setText("赠送");
sendGiftButton.setEnabled(true);
clearDrawGift();
}
@Override
@@ -1230,10 +1233,16 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
}
@Nullable
private List<HashMap<String, String>> getDrawFixedArray() {
private List<List<Integer>> getDrawFixedArray() {
return drawGiftHelper == null ? null : drawGiftHelper.getDrawFixedArray();
}
private void clearDrawGift() {
if (drawGiftHelper != null) {
drawGiftHelper.clearDrawGift();
}
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
@@ -1324,7 +1333,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
String msg,
boolean isKnap,
boolean isWholeMic,
List<HashMap<String, String>> drawFixedArray,
List<List<Integer>> drawFixedArray,
SenGiftCallback callback);
}

View File

@@ -27,6 +27,7 @@ import com.netease.nim.uikit.support.glide.GlideApp;
import com.yizhuan.erban.R;
import com.yizhuan.xchat_android_core.gift.GiftModel;
import com.yizhuan.xchat_android_core.gift.bean.GiftInfo;
import com.yizhuan.xchat_android_library.utils.ListUtils;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -103,6 +104,8 @@ public class DrawGiftHelper {
public void lazyDrawGiftView(int bottomSheetHeight, DrawGiftView.DrawGiftListener onDrawGiftListener) {
if (drawGiftView == null) {
drawGiftView = new DrawGiftView(activity);
int newSize = ScreenUtil.dip2px(10);
drawGiftView.setDrawStrokeInterval(newSize);
drawGiftView.setOnDrawGiftListener(onDrawGiftListener);
drawGiftView.showInActivityWindow(activity, bottomSheetHeight);
}
@@ -131,7 +134,8 @@ public class DrawGiftHelper {
}
//子线程处理播放礼物的数据
public void prepareShowDrawGift(List<HashMap<String, String>> fixedArray, boolean insertToFirst) {
public void prepareShowDrawGift(int giftId, List<List<Integer>> fixedArray, boolean insertToFirst) {
if (ListUtils.isListEmpty(fixedArray)) return;
//把服务器推送来的"礼物位置json" 和 本地的 giftBeanList 一一对应上找到礼物的bitmap
final List<DrawGiftModel> allDrawGiftArray = new ArrayList<>();
@@ -146,32 +150,25 @@ public class DrawGiftHelper {
.getDefaultDisplay().getMetrics(displayMetrics);
float viewWidth = displayMetrics.widthPixels;
float viewHeight = displayMetrics.heightPixels;
GiftInfo giftBean = GiftModel.get().findGiftInfoById(giftId);
Bitmap thumbGiftBitmap = cacheBitmapByGiftIdMap.get(giftId);
//fixedArray 是服务器推送过来的礼物json
for (HashMap<String, String> fixedMap : fixedArray) {
//giftBeanList 是手机本地缓存的全部礼物列表
//我们要做的就是两个列表相互匹配根据礼物id找出礼物的bitmap通过glide
int giftId = Integer.parseInt(fixedMap.get("giftid"));
GiftInfo giftBean = GiftModel.get().findGiftInfoById(giftId);
for (List<Integer> fixedMap : fixedArray) {
//将服务器推送来的xy转成绝对像素坐标
DrawGiftModel drawGiftModel = new DrawGiftModel();
drawGiftModel.setX(Float.valueOf(fixedMap.get("x")) * viewWidth);
drawGiftModel.setY(Float.valueOf(fixedMap.get("y")) * viewHeight);
Bitmap thumbGiftBitmap = cacheBitmapByGiftIdMap.get(giftId);
drawGiftModel.setX(fixedMap.get(0) / 1000f * viewWidth);
drawGiftModel.setY(fixedMap.get(1) / 1000f * viewHeight);
if (thumbGiftBitmap != null) {
//缓存中就有bitmap
drawGiftModel.setGiftBitmap(thumbGiftBitmap);
} else {
//缓存没有bitmap
//从Glide里找出礼物的bitmap
FutureTarget<Bitmap> futureBitmap = Glide.with(activity).asBitmap()
.load(giftBean.getGiftUrl())
.submit();
try {
Bitmap bitmap = futureBitmap.get();
thumbGiftBitmap = obtainThumbBitmap(giftId, bitmap);
@@ -219,13 +216,19 @@ public class DrawGiftHelper {
}
}
public List<HashMap<String, String>> getDrawFixedArray() {
public List<List<Integer>> getDrawFixedArray() {
if (drawGiftView != null) {
return drawGiftView.transformGiftArrayFitScreen(activity);
}
return null;
}
public void clearDrawGift() {
if (drawGiftView != null) {
drawGiftView.removeAll();
}
}
private static class MyHandler extends Handler {

View File

@@ -91,7 +91,7 @@ public class DrawGiftPlayView extends View {
Message message = Message.obtain();
message.arg1 = 0;
message.what = DRAW_ONE_GIFT;
mHandler.sendMessageDelayed(message, 100);
mHandler.sendMessageDelayed(message, 50);
}
}
}
@@ -112,7 +112,7 @@ public class DrawGiftPlayView extends View {
Message message = Message.obtain();
message.arg1 = currentGiftShowIndex + 1;
message.what = DRAW_ONE_GIFT;
mHandler.sendMessageDelayed(message, 100);
mHandler.sendMessageDelayed(message, 50);
}
return true;

View File

@@ -193,7 +193,7 @@ public class DrawGiftView extends View {
public void removeAll() {
strokeFirstPositionArray.clear();
allDrawGiftArray.clear();
invalidate();
postInvalidate();
}
//移除最后一笔
@@ -266,23 +266,22 @@ public class DrawGiftView extends View {
}
//由于不同手机屏幕尺寸不同如果礼物画在大屏幕的最右边X很大在小屏幕上绘制礼物的时候X会超出屏幕。因此在这里转成百分比再上传给服务器
public List<HashMap<String, String>> transformGiftArrayFitScreen(Context context) {
public List<List<Integer>> transformGiftArrayFitScreen(Context context) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(displayMetrics);
//fixedArray是需要转成json发送给服务器的
List<HashMap<String, String>> fixedArray = new ArrayList<>();
List<List<Integer>> fixedArray = new ArrayList<>();
float viewWidth = displayMetrics.widthPixels;
float viewHeight = displayMetrics.heightPixels;
HashMap<String, String> param = null;
List<Integer> param = null;
for (DrawGiftModel giftModel : allDrawGiftArray) {
//x 和 y转为屏幕比例
param = new HashMap<>();
param.put("x", String.valueOf(((int) ((giftModel.getX() / viewWidth) * 1000)) / 1000f));
param.put("y", String.valueOf(((int) ((giftModel.getY() / viewHeight) * 1000)) / 1000f));
param.put("giftid", String.valueOf(giftModel.getgiftId()));
param = new ArrayList<>();
param.add((int) ((giftModel.getX() / viewWidth) * 1000));
param.add((int) ((giftModel.getY() / viewHeight) * 1000));
fixedArray.add(param);
}
return fixedArray;

View File

@@ -184,7 +184,7 @@ public class MWTeamRoomMessageAct extends BaseMessageActivity implements IMWTeam
new OnGiftDialogBtnClickListenerWrapper() {
@SuppressLint("CheckResult")
@Override
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<HashMap<String, String>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<List<Integer>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
if (giftInfo == null) return;
if (mMwChatInfo != null) {

View File

@@ -207,7 +207,7 @@ public class MiniWorldTeamMessageActivity extends BaseMessageActivity implements
new OnGiftDialogBtnClickListenerWrapper() {
@SuppressLint("CheckResult")
@Override
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<HashMap<String, String>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<List<Integer>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
if (giftInfo == null) return;
if (mMwChatInfo != null) {

View File

@@ -304,7 +304,7 @@ public class PublicChatHallMessageFragment extends TFragment implements ModulePr
new OnGiftDialogBtnClickListenerWrapper() {
@SuppressLint("CheckResult")
@Override
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<HashMap<String, String>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList<MicMemberInfo> micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List<List<Integer>> drawFixedArray, GiftDialog.SenGiftCallback callback) {
if (giftInfo == null) return;
boolean canUseNobleGiftOrNot = GiftModel.get().canUseNobleGiftOrNot(giftInfo);
if (canUseNobleGiftOrNot) {