涂鸦礼物消息协议修改
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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();
|
||||
|
@@ -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 -> {}
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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 -> {
|
||||
|
@@ -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);
|
||||
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
||||
//将服务器推送来的x,y转成绝对像素坐标
|
||||
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 {
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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) {
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user