Kaynağa Gözat

红包消息

jixionghui 4 yıl önce
ebeveyn
işleme
f85c16c8d9
26 değiştirilmiş dosya ile 395 ekleme ve 283 silme
  1. 64 0
      jixin/src/main/java/com/jixin/im/animation/Rotate3DAnimation.java
  2. 54 0
      jixin/src/main/java/com/jixin/im/bean/redpacket/OpenRedpacket.java
  3. 17 7
      jixin/src/main/java/com/jixin/im/bean/redpacket/RedDialogBean.java
  4. 3 0
      jixin/src/main/java/com/jixin/im/fragment/BaseRedPacketFragment.java
  5. 1 1
      jixin/src/main/java/com/jixin/im/fragment/ChatFragment.java
  6. 1 1
      jixin/src/main/java/com/jixin/im/fragment/MucChatFragment.java
  7. 3 1
      jixin/src/main/java/com/jixin/im/fragment/NormalRedPacketFragment.java
  8. 2 1
      jixin/src/main/java/com/jixin/im/ui/message/ChatActivity.java
  9. 2 1
      jixin/src/main/java/com/jixin/im/ui/message/ChatActivityTemp.java
  10. 1 1
      jixin/src/main/java/com/jixin/im/ui/message/MucChatActivity.java
  11. 41 22
      jixin/src/main/java/com/jixin/im/view/chatHolder/RedViewHolder.java
  12. 54 57
      jixin/src/main/java/com/jixin/im/view/redDialog/RedDialog.java
  13. 5 0
      jixin/src/main/res/drawable/shape_dialog_red_packet_bg.xml
  14. 6 0
      jixin/src/main/res/drawable/shape_exclusive_bg_radius_5.xml
  15. 6 42
      jixin/src/main/res/layout/chat_from_item_redpacket.xml
  16. 5 85
      jixin/src/main/res/layout/chat_to_item_redpacket.xml
  17. 52 62
      jixin/src/main/res/layout/dialog_red_packet.xml
  18. 73 0
      jixin/src/main/res/layout/include_chat_item_red_packet.xml
  19. BIN
      jixin/src/main/res/mipmap-hdpi/envelope_not_receive_right_icon.png
  20. BIN
      jixin/src/main/res/mipmap-mdpi/envelope_not_receive_right_icon.png
  21. BIN
      jixin/src/main/res/mipmap-xhdpi/envelope_not_receive_right_icon.png
  22. BIN
      jixin/src/main/res/mipmap-xhdpi/icon_red_packet_open.png
  23. BIN
      jixin/src/main/res/mipmap-xxhdpi/envelope_not_receive_right_icon.png
  24. BIN
      jixin/src/main/res/mipmap-xxxhdpi/envelope_not_receive_right_icon.png
  25. 2 1
      jixin/src/main/res/values/dimens.xml
  26. 3 1
      jixin/src/main/res/values/strings.xml

+ 64 - 0
jixin/src/main/java/com/jixin/im/animation/Rotate3DAnimation.java

@@ -0,0 +1,64 @@
+package com.jixin.im.animation;
+
+
+import android.graphics.Camera;
+import android.graphics.Matrix;
+import android.view.animation.Animation;
+import android.view.animation.Transformation;
+
+/**
+ * 3D旋转
+ */
+public class Rotate3DAnimation extends Animation {
+    private  float mFromDegrees;// 开始角度
+    private  float mToDegrees;// 结束角度
+    // 中心点
+    private  float mCenterX;
+    private  float mCenterY;
+    //深度
+    private final float mDepthZ;
+    //是否需要扭曲
+    private final boolean mReverse;
+    //摄像头
+    private Camera mCamera;
+
+    public Rotate3DAnimation(float fromDegrees, float toDegrees, float centerX,
+                             float centerY, float depthZ, boolean reverse) {
+        mFromDegrees = fromDegrees;
+        mToDegrees = toDegrees;
+        mCenterX = centerX;
+        mCenterY = centerY;
+        mDepthZ = depthZ;
+        mReverse = reverse;
+    }
+
+    @Override
+    public void initialize(int width, int height, int parentWidth,
+                           int parentHeight) {
+        super.initialize(width, height, parentWidth, parentHeight);
+        mCamera = new Camera();
+    }
+
+    @Override
+    protected void applyTransformation(float interpolatedTime, Transformation t) {
+        final float fromDegrees = mFromDegrees;
+        // 生成中间角度
+        float degrees = fromDegrees
+                + ((mToDegrees - fromDegrees) * interpolatedTime);
+        final float centerX = mCenterX;
+        final float centerY = mCenterY;
+        final Camera camera = mCamera;
+        final Matrix matrix = t.getMatrix();//取得当前矩阵
+        camera.save();
+        if (mReverse) {
+            camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
+        } else {
+            camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
+        }
+        camera.rotateY(degrees);//翻转
+        camera.getMatrix(matrix);// 取得变换后的矩阵
+        camera.restore();
+        matrix.preTranslate(-centerX, -centerY);
+        matrix.postTranslate(centerX, centerY);
+    }
+}

+ 54 - 0
jixin/src/main/java/com/jixin/im/bean/redpacket/OpenRedpacket.java

@@ -56,6 +56,60 @@ public class OpenRedpacket implements Serializable {
         private String userName;
         private int outTime;
         private int type;
+        private String receivedRemark;
+        private String toUserId;
+        private List<String> userIds;
+        private String roomJid;
+        private int userRedType;
+        private String assignUserId;
+
+        public String getReceivedRemark() {
+            return receivedRemark;
+        }
+
+        public void setReceivedRemark(String receivedRemark) {
+            this.receivedRemark = receivedRemark;
+        }
+
+        public String getToUserId() {
+            return toUserId;
+        }
+
+        public void setToUserId(String toUserId) {
+            this.toUserId = toUserId;
+        }
+
+        public List<String> getUserIds() {
+            return userIds;
+        }
+
+        public void setUserIds(List<String> userIds) {
+            this.userIds = userIds;
+        }
+
+        public String getRoomJid() {
+            return roomJid;
+        }
+
+        public void setRoomJid(String roomJid) {
+            this.roomJid = roomJid;
+        }
+
+        public int getUserRedType() {
+            return userRedType;
+        }
+
+        public void setUserRedType(int userRedType) {
+            this.userRedType = userRedType;
+        }
+
+        public String getAssignUserId() {
+            return assignUserId;
+        }
+
+        public void setAssignUserId(String assignUserId) {
+            this.assignUserId = assignUserId;
+        }
 
         public String getId() {
             return id;

+ 17 - 7
jixin/src/main/java/com/jixin/im/bean/redpacket/RedDialogBean.java

@@ -1,24 +1,34 @@
 package com.jixin.im.bean.redpacket;
 
 public class RedDialogBean {
-    private String userId;
+    private String sendUserId;
     private String userName;
     private String words;
     private String redId;
+    private int type;
 
-    public RedDialogBean(String userId, String userName, String words, String redId) {
-        this.userId = userId;
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public RedDialogBean(String sendUserId, String userName, String words, String redId,int type) {
+        this.sendUserId = sendUserId;
         this.userName = userName;
         this.words = words;
         this.redId = redId;
+        this.type = type;
     }
 
-    public String getUserId() {
-        return userId;
+    public String getSendUserId() {
+        return sendUserId;
     }
 
-    public void setUserId(String userId) {
-        this.userId = userId;
+    public void setSendUserId(String sendUserId) {
+        this.sendUserId = sendUserId;
     }
 
     public String getUserName() {

+ 3 - 0
jixin/src/main/java/com/jixin/im/fragment/BaseRedPacketFragment.java

@@ -235,8 +235,11 @@ public abstract class BaseRedPacketFragment extends EasyFragment {
         if (params==null){
             params = new ArrayMap<>();
         }
+        params.put("access_token", coreManager.getSelfStatus().accessToken);
         params.put("moneyStr", pMoney);
         params.put("greetings", words);
+        params.put("count",String.valueOf(mRedPacketCount));
+
 
 
         PaySecureHelper.generateParam(

+ 1 - 1
jixin/src/main/java/com/jixin/im/fragment/ChatFragment.java

@@ -1248,7 +1248,7 @@ public class ChatFragment extends EasyFragment implements ChatContentView.Messag
                     public void onResponse(ObjectResult<OpenRedpacket> result) {
                         if (result.getResultCode() == 1) {
                             RedDialogBean redDialogBean = new RedDialogBean(msg.getFromUserId(), msg.getFromUserName(),
-                                    msg.getContent(), null);
+                                    msg.getContent(), result.getData().getPacket().getId(),result.getData().getPacket().getType());
                             mRedDialog = new RedDialog(getActivity(), redDialogBean, () -> {
                                 // 打开红包
                                 openRedPacket(msg);

+ 1 - 1
jixin/src/main/java/com/jixin/im/fragment/MucChatFragment.java

@@ -1971,7 +1971,7 @@ public class MucChatFragment extends EasyFragment implements
                     public void onResponse(ObjectResult<OpenRedpacket> result) {
                         if (result.getResultCode() == 1) {
                             RedDialogBean redDialogBean = new RedDialogBean(msg.getFromUserId(), msg.getFromUserName(),
-                                    msg.getContent(), null);
+                                    msg.getContent(), result.getData().getPacket().getId(),result.getData().getPacket().getType());
                             mRedDialog = new RedDialog(mContext, redDialogBean, () -> {
                                 // 打开红包
                                 openRedPacket(msg);

+ 3 - 1
jixin/src/main/java/com/jixin/im/fragment/NormalRedPacketFragment.java

@@ -157,7 +157,9 @@ public class NormalRedPacketFragment extends BaseRedPacketFragment{
 
     @Override
     protected ArrayMap<String, String> getSendRedPacketParameters() {
-        return null;
+        ArrayMap<String,String> arrayMap = new ArrayMap<>();
+        arrayMap.put("toUserId",mRedPacketAcceptorId);
+        return arrayMap;
     }
 
     //设置拼手气/普通红包切换Link事件

+ 2 - 1
jixin/src/main/java/com/jixin/im/ui/message/ChatActivity.java

@@ -1205,8 +1205,9 @@ public class ChatActivity extends BaseActivity implements
                     @Override
                     public void onResponse(ObjectResult<OpenRedpacket> result) {
                         if (result.getResultCode() == 1) {
+
                             RedDialogBean redDialogBean = new RedDialogBean(msg.getFromUserId(), msg.getFromUserName(),
-                                    msg.getContent(), null);
+                                    msg.getContent(), result.getData().getPacket().getId(),result.getData().getPacket().getType());
                             mRedDialog = new RedDialog(mContext, redDialogBean, () -> {
                                 // 打开红包
                                 openRedPacket(msg);

+ 2 - 1
jixin/src/main/java/com/jixin/im/ui/message/ChatActivityTemp.java

@@ -1230,8 +1230,9 @@ public class ChatActivityTemp extends BaseActivity implements
                     @Override
                     public void onResponse(ObjectResult<OpenRedpacket> result) {
                         if (result.getResultCode() == 1) {
+
                             RedDialogBean redDialogBean = new RedDialogBean(msg.getFromUserId(), msg.getFromUserName(),
-                                    msg.getContent(), null);
+                                    msg.getContent(), result.getData().getPacket().getId(),result.getData().getPacket().getType());
                             mRedDialog = new RedDialog(mContext, redDialogBean, () -> {
                                 // 打开红包
                                 openRedPacket(msg);

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
jixin/src/main/java/com/jixin/im/ui/message/MucChatActivity.java


+ 41 - 22
jixin/src/main/java/com/jixin/im/view/chatHolder/RedViewHolder.java

@@ -5,7 +5,6 @@ import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -16,6 +15,7 @@ import com.jixin.im.bean.redpacket.EventRedReceived;
 import com.jixin.im.bean.redpacket.OpenRedpacket;
 import com.jixin.im.bean.redpacket.RedDialogBean;
 import com.jixin.im.db.dao.ChatMessageDao;
+import com.jixin.im.helper.AvatarHelper;
 import com.jixin.im.ui.base.CoreManager;
 import com.jixin.im.ui.me.redpacket.RedDetailsActivity;
 import com.jixin.im.util.HtmlUtils;
@@ -23,6 +23,7 @@ import com.jixin.im.util.StringUtils;
 import com.jixin.im.util.ToastUtil;
 import com.jixin.im.view.NoDoubleClickListener;
 import com.jixin.im.view.redDialog.RedDialog;
+import com.makeramen.roundedimageview.RoundedImageView;
 import com.xuan.xuanhttplibrary.okhttp.HttpUtils;
 import com.xuan.xuanhttplibrary.okhttp.callback.BaseCallback;
 import com.xuan.xuanhttplibrary.okhttp.result.ObjectResult;
@@ -34,12 +35,15 @@ import okhttp3.Call;
 
 class RedViewHolder extends AChatHolderInterface {
 
-    TextView mTvContent;
-    TextView mTvType;
+//    TextView mTvType;
 
     boolean isKeyRed;
     private RedDialog mRedDialog;
-    private ImageView iv_image;
+
+    private RoundedImageView rivReceiverAvatar;
+    private TextView tvContent, tvExclusiveContent;
+    private TextView tvStatus;
+    private View redPacketBgView;
 
     @Override
     public int itemLayoutId(boolean isMysend) {
@@ -48,10 +52,12 @@ class RedViewHolder extends AChatHolderInterface {
 
     @Override
     public void initView(View view) {
-        mTvContent = view.findViewById(R.id.chat_text);
-        mTvType = view.findViewById(R.id.tv_type);
         mRootView = view.findViewById(R.id.chat_warp_view);
-        iv_image = view.findViewById(R.id.iv_image);
+        tvExclusiveContent = view.findViewById(R.id.tv_exclusive_content);
+        rivReceiverAvatar = view.findViewById(R.id.iv_receive_avatar);
+        redPacketBgView = view.findViewById(R.id.view_red_packet_bg);
+        tvStatus = view.findViewById(R.id.chat_status);
+        tvContent = view.findViewById(R.id.chat_content);
 
     }
 
@@ -59,22 +65,30 @@ class RedViewHolder extends AChatHolderInterface {
     public void fillData(ChatMessage message) {
         String s = StringUtils.replaceSpecialChar(message.getContent());
         CharSequence charSequence = HtmlUtils.transform200SpanString(s, true);
+        if ("4".equals(message.getFilePath())){
+            //专属红包
+            tvContent.setText("专属红包");
+            String msgTypeContent = String.format(getString(R.string.exclusive_red_packet),message.getToUserName());
+            String toUserId = message.getToUserId();
+            rivReceiverAvatar.setVisibility(View.VISIBLE);
+
+            AvatarHelper.getInstance().displayAvatar(toUserId, rivReceiverAvatar);
+            tvExclusiveContent.setText(msgTypeContent);
+            tvExclusiveContent.setVisibility(View.VISIBLE);
+        }else {
+            //普通红包,随机红包,口令红包
+            tvExclusiveContent.setVisibility(View.INVISIBLE);
+            rivReceiverAvatar.setVisibility(View.INVISIBLE);
+            tvContent.setText(charSequence);
+        }
+
+
         if (mdata.getFileSize() == 2) {// 已领取
             mRootView.setAlpha(0.6f);
-            mTvType.setText("");
-            mTvContent.setText(getString(R.string.redemption_of_red_envelope));
+            tvStatus.setText(getString(R.string.redemption_of_red_envelope));
         } else {
-            Log.d("测试", "fillData: message.getFilePath()=="+message.getFilePath());
-            if("2".equals(message.getFilePath())){
-                mTvType.setText("随机红包");
-            }else if("3".equals(message.getFilePath())){
-                mTvType.setText("口令红包");
-            }else {
-                mTvType.setText("普通红包");
-            }
-//            mTvType.setText(getString(isKeyRed ? R.string.chat_kl_red_pt : R.string.chat_red_new));
             mRootView.setAlpha(1f);
-            mTvContent.setText(charSequence);
+            tvStatus.setText(getString(R.string.unredemption_of_red_envelope));
         }
 
 //        isKeyRed = "2".equals(message.getFilePath());
@@ -142,15 +156,20 @@ class RedViewHolder extends AChatHolderInterface {
                                 mContext.startActivity(intent);
                             } else {
                                 // 在群里面我领取过的红包直接跳转
-                                if (isGounp && mdata.getFileSize() != 1) {
+
+                                String assignUserId = openRedpacket.getPacket().getAssignUserId();
+                                if (isGounp && ( mdata.getFileSize() != 1 || (!TextUtils.isEmpty(assignUserId) &&!mLoginUserId.equals(assignUserId)))) {
                                     mContext.startActivity(intent);
                                 } else {
                                     if (mdata.getFilePath().equals("3")) {
                                         // 口令红包编辑输入框
                                         changeBottomViewInputText(mdata.getContent());
                                     } else {
-                                        RedDialogBean redDialogBean = new RedDialogBean(openRedpacket.getPacket().getUserId(), openRedpacket.getPacket().getUserName(),
-                                                openRedpacket.getPacket().getGreetings(), openRedpacket.getPacket().getId());
+
+                                        OpenRedpacket.PacketEntity entity = openRedpacket.getPacket();
+                                        RedDialogBean redDialogBean = new RedDialogBean(entity.getUserId(),entity.getUserName(),
+                                                entity.getGreetings(), entity.getId(),entity.getType());
+
                                         mRedDialog = new RedDialog(mContext, redDialogBean, () -> openRedPacket(token, redId));
                                         mRedDialog.show();
                                     }

+ 54 - 57
jixin/src/main/java/com/jixin/im/view/redDialog/RedDialog.java

@@ -2,10 +2,13 @@ package com.jixin.im.view.redDialog;
 
 import android.app.Dialog;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.view.Gravity;
+import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
+import android.view.animation.AccelerateInterpolator;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
@@ -14,34 +17,19 @@ import android.widget.TextView;
 
 import com.jixin.im.MyApplication;
 import com.jixin.im.R;
+import com.jixin.im.animation.Rotate3DAnimation;
 import com.jixin.im.bean.redpacket.RedDialogBean;
 import com.jixin.im.helper.AvatarHelper;
 
 public class    RedDialog extends Dialog {
 
-    private RelativeLayout mRedRl;
-    private ImageView mAvatarIv, mOpenIv, mCloseIv;
-    private TextView mNameTv, mContentTv;
+    private ImageView mAvatarIv, mOpenIv;
+    private TextView mNameTv, mContentTv,mTypeTv;
     private RedDialogBean mRedDialogBean;
 
     private Context mContext;
 
-    private FrameAnimation mFrameAnimation;
-    private int[] mImgResIds = new int[]{
-            R.mipmap.icon_open_red_packet1,
-            R.mipmap.icon_open_red_packet2,
-            R.mipmap.icon_open_red_packet3,
-            R.mipmap.icon_open_red_packet4,
-            R.mipmap.icon_open_red_packet5,
-            R.mipmap.icon_open_red_packet6,
-            R.mipmap.icon_open_red_packet7,
-            R.mipmap.icon_open_red_packet7,
-            R.mipmap.icon_open_red_packet8,
-            R.mipmap.icon_open_red_packet9,
-            R.mipmap.icon_open_red_packet4,
-            R.mipmap.icon_open_red_packet10,
-            R.mipmap.icon_open_red_packet11,
-    };
+
 
     private OnClickRedListener mOnClickRedListener;
 
@@ -70,72 +58,81 @@ public class    RedDialog extends Dialog {
     }
 
     private void initView() {
-        mRedRl = findViewById(R.id.rl_red);
-        mAvatarIv = findViewById(R.id.iv_avatar);
-        mNameTv = findViewById(R.id.tv_name);
-        mContentTv = findViewById(R.id.tv_msg);
+        mAvatarIv = findViewById(R.id.iv_receive_avatar);
+        mNameTv = findViewById(R.id.tv_nickname);
+        mContentTv = findViewById(R.id.tv_dialog_content);
+        mTypeTv = findViewById(R.id.tv_dialog_type);
         mOpenIv = findViewById(R.id.iv_open);
-        mCloseIv = findViewById(R.id.iv_close);
+
     }
 
     private void initData() {
-        AvatarHelper.getInstance().displayAvatar(mRedDialogBean.getUserName(), mRedDialogBean.getUserId(),
+        AvatarHelper.getInstance().displayAvatar(mRedDialogBean.getUserName(), mRedDialogBean.getSendUserId(),
                 mAvatarIv, true);
         mNameTv.setText(MyApplication.getContext().getString(R.string.red_someone, mRedDialogBean.getUserName()));
         mContentTv.setText(mRedDialogBean.getWords());
+        if (mRedDialogBean.getType()== 4){
+            mTypeTv.setText("专属红包");
+        }else if (mRedDialogBean.getType()== 3){
+            mTypeTv.setText("口令红包");
+        }else {
+            mTypeTv.setText("");
+        }
 
-        Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.anim_red);
-        mRedRl.setAnimation(animation);
     }
 
     private void initEvent() {
         mOpenIv.setOnClickListener(v -> {
-            if (mFrameAnimation != null) {
-                return;
-            }
-            startAnim();
-            if (mOnClickRedListener != null) {
-                mOnClickRedListener.clickRed();
-            }
-        });
-
-        mCloseIv.setOnClickListener(v -> {
-            stopAnim();
-            dismiss();
+            applyRotation(mOpenIv, 0, 180);
         });
     }
 
-    private void startAnim() {
-        mFrameAnimation = new FrameAnimation(mOpenIv, mImgResIds, 125, true);
-        mFrameAnimation.setAnimationListener(new FrameAnimation.AnimationListener() {
-            @Override
-            public void onAnimationStart() {
 
-            }
 
+
+    /**
+     * 执行翻转第一个视图动画
+     * @param start 起始角度
+     * @param end 结束角度
+     */
+    private void applyRotation(View aniView , float start, float end) {
+        // 得到中心点(以中心翻转)
+        final float centerX = aniView.getWidth() / 2.0f;
+        final float centerY = aniView.getHeight() / 2.0f;
+        // 根据参数创建一个新的三维动画,并且监听触发下一个动画
+        final Rotate3DAnimation rotation = new Rotate3DAnimation(start, end, centerX, centerY,310.0f, true);
+        rotation.setDuration(300);//设置动画持续时间
+        rotation.setInterpolator(new AccelerateInterpolator());//设置动画变化速度
+        rotation.setAnimationListener(new Animation.AnimationListener() {
             @Override
-            public void onAnimationEnd() {
+            public void onAnimationStart(Animation animation) {
 
             }
 
             @Override
-            public void onAnimationRepeat() {
-
+            public void onAnimationEnd(Animation animation) {
+                dismiss();
+                if (mOnClickRedListener!=null){
+                    mOnClickRedListener.clickRed();
+                }
+//                Intent intent = new Intent(getContext(), RedEnvelopeActivity.class);
+//                intent.putExtra(RedEnvelopeActivity.STATUS,RedEnvelopeActivity.STATUS_OPEN);
+//                intent.putExtra(RedEnvelopeActivity.TYPE,RedEnvelopeActivity.TYPE_PRIVATE);
+//                getContext().startActivity(intent);
+//                dismiss();
             }
 
             @Override
-            public void onAnimationPause() {
-                mOpenIv.setBackgroundResource(R.mipmap.icon_open_red_packet1);
+            public void onAnimationRepeat(Animation animation) {
+
             }
-        });
+        });//显示下一个视图
+        aniView.startAnimation(rotation);
     }
 
-    private void stopAnim() {
-        if (mFrameAnimation != null) {
-            mFrameAnimation.release();
-            mFrameAnimation = null;
-        }
-    }
+
+
+
 
     public interface OnClickRedListener {
         void clickRed();

+ 5 - 0
jixin/src/main/res/drawable/shape_dialog_red_packet_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#d5311e"/>
+    <corners android:radius="12dp"/>
+</shape>

+ 6 - 0
jixin/src/main/res/drawable/shape_exclusive_bg_radius_5.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#d4d4d4"/>
+    <corners android:radius="5dp"/>
+
+</shape>

+ 6 - 42
jixin/src/main/res/layout/chat_from_item_redpacket.xml

@@ -16,7 +16,8 @@
         android:id="@+id/chat_head_iv"
         android:layout_width="@dimen/chat_head_size"
         android:layout_height="@dimen/chat_head_size"
-        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
         android:layout_below="@id/time_tv"
         android:layout_marginEnd="@dimen/chat_head_right"
         android:layout_marginStart="@dimen/chat_head_left"
@@ -34,50 +35,13 @@
         android:text=""
         android:textSize="@dimen/SmallerTextSize"
         android:visibility="gone" />
+    <include layout="@layout/include_chat_item_red_packet"
+        android:layout_width="@dimen/chat_width_red"
 
-    <RelativeLayout
         android:id="@+id/chat_warp_view"
-        android:layout_width="@dimen/chat_width_red"
-        android:layout_height="81dp"
-        android:layout_below="@id/nick_name"
+        android:layout_height="@dimen/chat_height_red"
         android:layout_marginTop="@dimen/chat_head_top"
-        android:layout_toLeftOf="@id/chat_head_iv"
-        android:background="@mipmap/envelope_not_receive_right_icon">
-
-        <ImageView
-            android:id="@+id/iv_image"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            android:layout_marginLeft="16dp"
-            android:layout_marginTop="20dp"
-            android:src="@drawable/red_icon" />
-
-        <TextView
-            android:id="@+id/chat_text"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginLeft="14dp"
-            android:layout_marginTop="25dp"
-            android:layout_toRightOf="@id/iv_image"
-            android:maxWidth="140dp"
-            android:maxLines="1"
-            android:text="@string/auspicious"
-            android:textColor="@color/white"
-            android:textSize="@dimen/chat_text_size" />
-
-        <TextView
-            android:id="@+id/tv_type"
-            android:layout_width="wrap_content"
-            android:layout_height="15dp"
-            android:layout_below="@+id/chat_text"
-            android:layout_centerVertical="true"
-            android:layout_marginLeft="14dp"
-            android:layout_toRightOf="@id/iv_image"
-            android:text="红包"
-            android:textColor="@color/white"
-            android:textSize="11dp" />
-    </RelativeLayout>
+        android:layout_toStartOf="@id/chat_head_iv"/>
 
     <include layout="@layout/view_holder_state_from" />
 

+ 5 - 85
jixin/src/main/res/layout/chat_to_item_redpacket.xml

@@ -73,94 +73,14 @@
         android:textSize="10dp"
         android:visibility="gone" />
 
-    <!-- <RelativeLayout
-         android:id="@+id/chat_warp_view"
-         android:layout_width="@dimen/chat_width_red"
-         android:layout_height="64dp"
-         android:layout_below="@id/nick_name"
-         android:layout_marginTop="@dimen/chat_head_top"
-         android:layout_toRightOf="@id/chat_head_iv"
-         android:background="@drawable/a_bg_for_chat_red1">
 
-         <ImageView
-             android:id="@+id/iv_image"
-             android:layout_width="30dp"
-             android:layout_height="30dp"
-             android:layout_centerVertical="true"
-             android:layout_marginLeft="8dp"
-             android:layout_marginTop="20dp"
-             android:src="@drawable/ic_chat_hongbao" />
-
-         <TextView
-             android:id="@+id/chat_text"
-             android:layout_width="wrap_content"
-             android:layout_height="wrap_content"
-             android:layout_centerVertical="true"
-             android:layout_marginLeft="8dp"
-             android:layout_toRightOf="@id/iv_image"
-             android:maxLines="1"
-             android:maxWidth="140dp"
-             android:text="@string/best_wishes"
-             android:textColor="@color/white"
-             android:textSize="@dimen/chat_text_size" />
-
-     </RelativeLayout>
-
-     <TextView
-         android:id="@+id/tv_type"
-         android:layout_width="@dimen/chat_width_red"
-         android:layout_height="22dp"
-         android:layout_below="@id/chat_warp_view"
-         android:layout_toRightOf="@id/chat_head_iv"
-         android:background="@drawable/a_bg_for_chat_red2"
-         android:gravity="center_vertical"
-         android:paddingLeft="12dp"
-         android:text="@string/chat_red"
-         android:textColor="@color/Grey_500"
-         android:textSize="11sp" />-->
-    <RelativeLayout
-        android:id="@+id/chat_warp_view"
+    <include layout="@layout/include_chat_item_red_packet"
         android:layout_width="@dimen/chat_width_red"
-        android:layout_height="81dp"
-        android:layout_below="@id/nick_name"
-        android:layout_marginTop="@dimen/chat_head_top"
-        android:layout_toRightOf="@id/chat_head_iv"
-        android:background="@mipmap/envelope_not_receive_left_icon">
-
-        <ImageView
-            android:id="@+id/iv_image"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            android:layout_marginLeft="16dp"
-            android:layout_marginTop="20dp"
-            android:src="@drawable/red_icon" />
-
-        <TextView
-            android:id="@+id/chat_text"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginLeft="14dp"
-            android:layout_marginTop="25dp"
-            android:layout_toRightOf="@id/iv_image"
-            android:maxWidth="140dp"
-            android:maxLines="1"
-            android:text="@string/auspicious"
-            android:textColor="@color/white"
-            android:textSize="@dimen/chat_text_size" />
+        android:layout_toEndOf="@id/chat_head_iv"
+        android:id="@+id/chat_warp_view"
+        android:layout_height="@dimen/chat_height_red"
+        android:layout_marginTop="@dimen/chat_head_top"/>
 
-        <TextView
-            android:id="@+id/tv_type"
-            android:layout_width="wrap_content"
-            android:layout_height="15dp"
-            android:layout_below="@+id/chat_text"
-            android:layout_centerVertical="true"
-            android:layout_marginLeft="14dp"
-            android:layout_toRightOf="@id/iv_image"
-            android:text="红包"
-            android:textColor="@color/white"
-            android:textSize="11dp" />
-    </RelativeLayout>
 
     <include layout="@layout/view_holder_state_to" />
 

+ 52 - 62
jixin/src/main/res/layout/dialog_red_packet.xml

@@ -2,80 +2,70 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="wrap_content">
 
     <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="500dp"
-        android:layout_centerInParent="true">
+        android:layout_width="264dp"
 
-        <RelativeLayout
-            android:id="@+id/rl_red"
-            android:layout_width="match_parent"
-            android:layout_height="440dp"
-            android:layout_marginLeft="15dp"
-            android:layout_marginTop="15dp"
-            android:layout_marginRight="15dp"
-            android:background="@mipmap/red_packet_bg">
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"
+        android:background="@drawable/shape_dialog_red_packet_bg">
 
-            <LinearLayout
-                android:id="@+id/ll_desc"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="60dp"
-                android:gravity="center">
+        <ImageView
+            android:id="@+id/iv_open"
+            android:layout_width="82dp"
+            android:layout_height="82dp"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="64dp"
+            android:layout_marginBottom="100dp"
+            android:background="@mipmap/icon_red_packet_open" />
 
-                <com.jixin.im.view.CircleImageView
-                    android:id="@+id/iv_avatar"
-                    android:layout_width="25dp"
-                    android:layout_height="25dp"
-                    android:layout_marginRight="4dp"
-                    tools:src="@drawable/default_head" />
+        <TextView
+            android:id="@+id/tv_dialog_content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
 
-                <TextView
-                    android:id="@+id/tv_name"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginLeft="4dp"
-                    android:textColor="#FFE294"
-                    android:textSize="@dimen/sp_13_text_size"
-                    tools:text="xx的红包" />
+            android:layout_below="@+id/iv_open"
+            android:layout_centerHorizontal="true"
+            android:text="恭喜发财"
+            android:textColor="#FEEE5E"
+            android:textSize="32sp" />
+        <TextView
+            android:id="@+id/tv_dialog_type"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
 
-            </LinearLayout>
+            android:layout_below="@+id/tv_dialog_content"
+            android:layout_centerHorizontal="true"
+            android:text="口令红包"
+            android:layout_marginTop="12dp"
+            android:textColor="#FEEE5E"
+            android:textSize="16sp" />
 
+        <LinearLayout
+            android:layout_marginBottom="48dp"
+            android:layout_width="wrap_content"
+            android:layout_below="@+id/tv_dialog_type"
+            android:orientation="horizontal"
+            android:gravity="center"
+            android:layout_centerHorizontal="true"
+            android:layout_height="wrap_content">
+            <com.makeramen.roundedimageview.RoundedImageView
+                android:id="@+id/iv_receive_avatar"
+                android:layout_width="32dp"
+                android:layout_height="32dp"/>
             <TextView
-                android:id="@+id/tv_msg"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_below="@+id/ll_desc"
-                android:ellipsize="end"
-                android:gravity="center"
-                android:padding="10dp"
-                android:singleLine="true"
-                android:textColor="#FFE294"
-                android:textSize="18sp"
-                tools:text="@string/best_wishes" />
+                android:id="@+id/tv_nickname"
+                android:textSize="16sp"
+                android:text="张大三的红包"
+                android:textColor="#FEEE5E"
+                android:layout_marginStart="8dp"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
 
-            <ImageView
-                android:id="@+id/iv_open"
-                android:layout_width="70dp"
-                android:layout_height="70dp"
-                android:layout_alignParentBottom="true"
-                android:layout_centerHorizontal="true"
-                android:layout_marginBottom="100dp"
-                android:background="@mipmap/icon_open_red_packet1" />
+        </LinearLayout>
 
-        </RelativeLayout>
 
-        <ImageView
-            android:id="@+id/iv_close"
-            android:layout_width="40dp"
-            android:layout_height="40dp"
-            android:layout_alignParentBottom="true"
-            android:layout_centerHorizontal="true"
-            android:layout_marginBottom="15dp"
-            android:padding="12dp"
-            android:src="@mipmap/icon_red_packet_close" />
 
     </RelativeLayout>
 

+ 73 - 0
jixin/src/main/res/layout/include_chat_item_red_packet.xml

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+
+    android:layout_width="@dimen/chat_width_red"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="@dimen/chat_head_top">
+    <View
+        android:id="@+id/view_red_packet_bg"
+        android:layout_width="@dimen/chat_width_red"
+        android:background="@mipmap/envelope_not_receive_right_icon"
+        android:layout_height="@dimen/chat_height_red"/>
+
+
+    <TextView
+        android:id="@+id/chat_content"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:maxWidth="140dp"
+        android:maxLines="1"
+        android:layout_centerHorizontal="true"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
+        android:layout_marginBottom="3dp"
+        android:ellipsize="end"
+
+        android:text="财源滚滚滚滚财源滚滚滚滚"
+        android:layout_above="@+id/chat_status"
+        android:textColor="#FDED5D"
+        android:textSize="12sp" />
+
+
+    <TextView
+        android:id="@+id/chat_status"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_above="@+id/iv_receive_avatar"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
+        android:layout_marginBottom="3dp"
+        android:ellipsize="end"
+        android:maxWidth="140dp"
+        android:maxLines="1"
+        android:text="专属红包"
+        android:textColor="#FDED5D"
+        android:textSize="8sp" />
+
+    <com.makeramen.roundedimageview.RoundedImageView
+        android:id="@+id/iv_receive_avatar"
+        android:layout_width="21dp"
+        app:riv_oval="true"
+        android:layout_alignBottom="@+id/view_red_packet_bg"
+        android:layout_marginBottom="12dp"
+        android:layout_centerHorizontal="true"
+        android:layout_height="21dp" />
+    <TextView
+        android:id="@+id/tv_exclusive_content"
+        android:layout_width="wrap_content"
+        android:maxWidth="96dp"
+        android:textColor="#656565"
+        android:textSize="7sp"
+        android:layout_marginStart="8dp"
+        android:text="给小林子,重重的专属红包"
+
+        android:ellipsize="end"
+        android:padding="3dp"
+        android:background="@drawable/shape_exclusive_bg_radius_5"
+
+        android:layout_below="@+id/view_red_packet_bg"
+        android:layout_height="wrap_content"/>
+
+</RelativeLayout>

BIN
jixin/src/main/res/mipmap-hdpi/envelope_not_receive_right_icon.png


BIN
jixin/src/main/res/mipmap-mdpi/envelope_not_receive_right_icon.png


BIN
jixin/src/main/res/mipmap-xhdpi/envelope_not_receive_right_icon.png


BIN
jixin/src/main/res/mipmap-xhdpi/icon_red_packet_open.png


BIN
jixin/src/main/res/mipmap-xxhdpi/envelope_not_receive_right_icon.png


BIN
jixin/src/main/res/mipmap-xxxhdpi/envelope_not_receive_right_icon.png


+ 2 - 1
jixin/src/main/res/values/dimens.xml

@@ -157,7 +157,8 @@
 
     <!-- CHATCONTENT -->
     <dimen name="chat_form_info_width">220dp</dimen>
-    <dimen name="chat_width_red">220dp</dimen>
+    <dimen name="chat_width_red">103dp</dimen>
+    <dimen name="chat_height_red">130dp</dimen>
     <dimen name="chat_state_top">2dp</dimen>
     <dimen name="chat_text_size">13sp</dimen>
     <dimen name="message_fire_padding">4dp</dimen>

+ 3 - 1
jixin/src/main/res/values/strings.xml

@@ -2094,7 +2094,9 @@
     <string name="auspicious">财源滚滚,心想事成</string>
     <string name="chat_red_new">手气红包</string>
     <string name="message_red_new">口令</string>
-    <string name="redemption_of_red_envelope">已领取红包</string>
+    <string name="redemption_of_red_envelope">已领取</string>
+    <string name="exclusive_red_packet">%1$1s的专属红包</string>
+    <string name="unredemption_of_red_envelope">未领取</string>
     <string name="skin_qian_dou_green">浅豆绿</string>
     <string name="skin_Qing_Shui_blue">清水蓝</string>
     <string name="skin_Shan_Hu_Hong">珊瑚红</string>