diff --git a/app/src/main/assets/svga/home_living.svga b/app/src/main/assets/svga/home_living.svga new file mode 100644 index 000000000..a9de042b7 Binary files /dev/null and b/app/src/main/assets/svga/home_living.svga differ diff --git a/app/src/main/assets/svga/home_white_living.svga b/app/src/main/assets/svga/home_white_living.svga new file mode 100644 index 000000000..2ef770c92 Binary files /dev/null and b/app/src/main/assets/svga/home_white_living.svga differ diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt b/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt index 827c69cf3..7ae19573a 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt @@ -1,12 +1,15 @@ package com.yizhuan.erban.home.adapter import android.view.View -import androidx.core.content.ContextCompat +import androidx.constraintlayout.widget.Group import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder +import com.opensource.svgaplayer.SVGAImageView import com.yizhuan.erban.R import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 +import com.yizhuan.erban.ui.utils.loadFromAssets import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo +import com.yizhuan.xchat_android_library.utils.StringCutUtils /** * create by lvzebiao @2019/11/13 @@ -15,17 +18,22 @@ class HomeChatAdapter : BaseQuickAdapter(R.layout.item_home_chat) { override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) { - when(item.gender){ - 0 ->{ - helper.getView(R.id.view_bg).background = ContextCompat.getDrawable(mContext,R.drawable.bg_home_chat_man) - } - 1 ->{ - helper.getView(R.id.view_bg).background = ContextCompat.getDrawable(mContext,R.drawable.bg_home_chat_man) - } - 2 ->{ - helper.getView(R.id.view_bg).background = ContextCompat.getDrawable(mContext,R.drawable.bg_home_chat_women) - } - } + val svgaLiving = helper.getView(R.id.svga_living) ImageLoadUtilsV2.loadAvatar(helper.getView(R.id.iv_avatar), item.avatar) + val name = StringCutUtils.subStrByLen(item.title.substring(0, item.title.length - 3), 8) + helper.setText(R.id.tv_name, name) + if (item.mgId == 0L) { + helper.getView(R.id.group_game).visibility = View.INVISIBLE + } else { + helper.getView(R.id.group_game).visibility = View.VISIBLE + } + svgaLiving.loadFromAssets("svga/home_living.svga") } + + override fun onViewAttachedToWindow(holder: BaseViewHolder) { + super.onViewAttachedToWindow(holder) + val svgaLiving = holder.getView(R.id.svga_living) + svgaLiving?.loadFromAssets("svga/home_living.svga") + } + } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt index 86f225bb0..57ba4ff53 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt @@ -1,24 +1,33 @@ package com.yizhuan.erban.home.adapter +import android.text.TextUtils import android.view.View import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.constraintlayout.widget.Group import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder -import com.opensource.svgaplayer.SVGAImageView +import com.google.android.flexbox.AlignItems +import com.google.android.flexbox.FlexDirection import com.yizhuan.erban.R import com.yizhuan.erban.avroom.activity.AVRoomActivity import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity import com.yizhuan.erban.ui.user.activity.UserInfoActivity +import com.yizhuan.erban.ui.user.adapter.UserInfoLabelAdapter +import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.erban.ui.utils.loadAvatar -import com.yizhuan.erban.ui.utils.loadFromAssets -import com.yizhuan.erban.vip.util.VipHelper import com.yizhuan.xchat_android_core.user.bean.UserInfo +import com.yizhuan.xchat_android_core.user.bean.UserInfo.SoundBean import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils import com.yizhuan.xchat_android_core.utils.StarUtils import com.yizhuan.xchat_android_core.utils.ifNullOrEmpty +import com.yizhuan.xchat_android_library.common.widget.LinesFlexBoxLayoutManager +import com.yizhuan.xchat_android_library.utils.ListUtils import java.util.* class RoomNewFriendsAdapter : @@ -43,27 +52,25 @@ class RoomNewFriendsAdapter : R.id.iv_gender, if (item.gender == 1) R.drawable.ic_home_man else R.drawable.ic_home_woman ) - val tvOnlineText = helper.getView(R.id.tv_online_text) - val ivTalk = helper.getView(R.id.iv_talk) - val svgaLiving = helper.getView(R.id.svga_living) - val llOnline = helper.getView(R.id.ll_online) + val tvTalk = helper.getView(R.id.tv_talk) val viewOnline = helper.getView(R.id.view_online) + val groupParty = helper.getView(R.id.group_party) + + viewOnline.isVisible = item.inOnline + if(item.inMic){ + groupParty.visibility = View.VISIBLE + } else { + groupParty.visibility = View.INVISIBLE + } if (item.inRoomUid != 0L) { - ivTalk.isVisible = false - svgaLiving.isVisible = true - viewOnline.isVisible = true - svgaLiving.loadFromAssets("svga/home_living.svga") - tvOnlineText.text = "直播中" - llOnline.setOnClickListener { + tvTalk.text = "去找TA" + tvTalk.setOnClickListener { AVRoomActivity.start(mContext, item.inRoomUid) } } else { - ivTalk.isVisible = true - svgaLiving.isVisible = false - viewOnline.isVisible = false - tvOnlineText.text = "和TA聊" - llOnline.setOnClickListener { + tvTalk.text = "和TA聊" + tvTalk.setOnClickListener { NimP2PMessageActivity.start(mContext, item.uid.toString()) } } @@ -74,15 +81,58 @@ class RoomNewFriendsAdapter : val tvNickname = helper.getView(R.id.tv_nickname) tvNickname.text = item.nick - VipHelper.loadVipNickColor(tvNickname, item.userVipInfoVO, "#282828") - VipHelper.loadVipIcon(helper.getView(R.id.iv_vip_icon), item.userVipInfoVO) + + val ivUserLevel: AppCompatImageView = helper.getView(R.id.iv_user_level) + ivUserLevel.visibility = View.GONE + if (item.userLevelVo != null && !TextUtils.isEmpty(item.userLevelVo.getExperUrl())) { + ivUserLevel.visibility = View.VISIBLE + ImageLoadUtils.loadImage(mContext, item.userLevelVo.getExperUrl(), ivUserLevel) + } + + val ivCharmLevel: AppCompatImageView = helper.getView(R.id.iv_charm_level) + ivCharmLevel.visibility = View.GONE + if (item.userLevelVo != null && !TextUtils.isEmpty(item.userLevelVo.getCharmUrl())) { + ivCharmLevel.visibility = View.VISIBLE + ImageLoadUtils.loadImage( + mContext, + item.userLevelVo.getCharmUrl(), + ivCharmLevel + ) + } + + if (item.audioCard != null && !TextUtils.isEmpty(item.audioCard.audioUrl)) { + helper.getView(R.id.tv_desc).visibility = View.GONE + helper.getView(R.id.llAudio).visibility = View.VISIBLE + + helper.getView(R.id.tvAudio).text = item.audioCard.second.toString() + helper.getView(R.id.llAudio) + .setOnClickListener { v -> toggleAudio(item.audioCard) } + } else { + helper.getView(R.id.tv_desc).visibility = View.VISIBLE + helper.getView(R.id.llAudio).visibility = View.GONE + } + + val mLabelRecyclerView = helper.getView(R.id.mLabelRecyclerView) + if(!ListUtils.isListEmpty(item.labels)){ + mLabelRecyclerView.visibility = View.VISIBLE + val userInfoLabelAdapter = UserInfoLabelAdapter() + + val labelLayoutManager = LinesFlexBoxLayoutManager(mContext) + labelLayoutManager.flexDirection = FlexDirection.ROW + labelLayoutManager.alignItems = AlignItems.FLEX_START + labelLayoutManager.setMaxLines(1) + mLabelRecyclerView.layoutManager = labelLayoutManager + mLabelRecyclerView.adapter = userInfoLabelAdapter + + userInfoLabelAdapter.setNewData(item.labels) + } else { + mLabelRecyclerView.visibility = View.GONE + } + } - override fun onViewAttachedToWindow(holder: BaseViewHolder) { - super.onViewAttachedToWindow(holder) - val svgaLiving = holder.getView(R.id.svga_living) - svgaLiving?.loadFromAssets("svga/home_living.svga") - } + private fun toggleAudio(audioCard: SoundBean) { + } } \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/bg_game.png b/app/src/main/res/drawable-xhdpi/bg_game.png new file mode 100644 index 000000000..033b53995 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_game.png differ diff --git a/app/src/main/res/drawable-xhdpi/bg_masking_game.png b/app/src/main/res/drawable-xhdpi/bg_masking_game.png new file mode 100644 index 000000000..d3e746757 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_masking_game.png differ diff --git a/app/src/main/res/drawable-xhdpi/bg_masking_party.png b/app/src/main/res/drawable-xhdpi/bg_masking_party.png new file mode 100644 index 000000000..132967a64 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_masking_party.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_sound_pause.png b/app/src/main/res/drawable-xhdpi/ic_sound_pause.png new file mode 100644 index 000000000..ee0313d22 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_sound_pause.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_sound_star.png b/app/src/main/res/drawable-xhdpi/ic_sound_star.png new file mode 100644 index 000000000..20c210b4d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_sound_star.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_sound_wave.png b/app/src/main/res/drawable-xhdpi/ic_sound_wave.png new file mode 100644 index 000000000..4f804ba4d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_sound_wave.png differ diff --git a/app/src/main/res/drawable-xhdpi/iv_party.png b/app/src/main/res/drawable-xhdpi/iv_party.png new file mode 100644 index 000000000..88020a9f5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/iv_party.png differ diff --git a/app/src/main/res/drawable/bg_759fff_2.xml b/app/src/main/res/drawable/bg_759fff_2.xml new file mode 100644 index 000000000..d856d8c92 --- /dev/null +++ b/app/src/main/res/drawable/bg_759fff_2.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_339168fa_corner.xml b/app/src/main/res/drawable/shape_339168fa_corner.xml new file mode 100644 index 000000000..088650767 --- /dev/null +++ b/app/src/main/res/drawable/shape_339168fa_corner.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_room_new_friends_bg.xml b/app/src/main/res/drawable/shape_room_new_friends_bg.xml index 8f3f73b37..3719f7d2b 100644 --- a/app/src/main/res/drawable/shape_room_new_friends_bg.xml +++ b/app/src/main/res/drawable/shape_room_new_friends_bg.xml @@ -4,7 +4,7 @@ - + diff --git a/app/src/main/res/layout/fragment_accompany.xml b/app/src/main/res/layout/fragment_accompany.xml index 7d0b12d8b..59e0cf5ae 100644 --- a/app/src/main/res/layout/fragment_accompany.xml +++ b/app/src/main/res/layout/fragment_accompany.xml @@ -71,6 +71,7 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:overScrollMode="never" + android:layout_marginStart="@dimen/dp_4" android:paddingStart="0dp" android:paddingEnd="@dimen/dp_10" android:scrollbars="none" @@ -90,7 +91,7 @@ android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/dp_2" + android:layout_marginTop="@dimen/dp_10" android:overScrollMode="never" android:scrollbars="none" /> diff --git a/app/src/main/res/layout/item_home_chat.xml b/app/src/main/res/layout/item_home_chat.xml index 0beecfde4..e42fd81ba 100644 --- a/app/src/main/res/layout/item_home_chat.xml +++ b/app/src/main/res/layout/item_home_chat.xml @@ -4,25 +4,26 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root_view" android:layout_width="wrap_content" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_8"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintStart_toStartOf="@+id/view_aperture" + app:layout_constraintTop_toTopOf="@+id/view_aperture" /> + + + + + + + + + tools:text="音樂與你" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_room_new_friends.xml b/app/src/main/res/layout/item_room_new_friends.xml index 5931e8858..b916883b6 100644 --- a/app/src/main/res/layout/item_room_new_friends.xml +++ b/app/src/main/res/layout/item_room_new_friends.xml @@ -10,43 +10,78 @@ android:id="@+id/view_bg" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginStart="10dp" - android:layout_marginEnd="15dp" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" android:background="@drawable/shape_room_new_friends_bg" - app:layout_constraintDimensionRatio="335:93" + app:layout_constraintDimensionRatio="351:96" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="1.0" - app:layout_constraintStart_toStartOf="@id/iv_avatar" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintBottom_toBottomOf="@+id/view_aperture" + app:layout_constraintEnd_toEndOf="@+id/view_aperture" + app:layout_constraintStart_toStartOf="@+id/view_aperture" + app:layout_constraintTop_toTopOf="@+id/view_aperture" /> + + + + + + + app:layout_constraintBottom_toBottomOf="@id/iv_avatar" + app:layout_constraintEnd_toEndOf="@id/iv_avatar" /> @@ -58,37 +93,52 @@ android:layout_marginStart="4dp" android:background="@drawable/shape_ff9cce_corner" android:gravity="center_vertical" + app:layout_constraintBottom_toBottomOf="@id/tv_nickname" app:layout_constraintStart_toEndOf="@id/tv_nickname" - app:layout_constraintTop_toTopOf="@+id/tv_nickname" - app:layout_constraintBottom_toBottomOf="@id/tv_nickname"> + app:layout_constraintTop_toTopOf="@+id/tv_nickname"> + app:layout_constraintTop_toTopOf="@id/tv_nickname" + tools:src="@mipmap/ic_user_level" + tools:visibility="visible" /> + + + + + android:layout_height="@dimen/dp_26" + android:layout_marginStart="@dimen/dp_10" + android:layout_marginTop="6dp" + android:background="@drawable/bg_f5f6fa_anomaly" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingStart="@dimen/dp_6" + android:paddingEnd="@dimen/dp_12" + android:visibility="gone" + app:layout_constraintStart_toEndOf="@id/iv_avatar" + app:layout_constraintTop_toBottomOf="@id/tv_constellation" + tools:visibility="visible"> - + + android:id="@+id/liv_user" + android:layout_width="@dimen/dp_22" + android:layout_height="@dimen/dp_10" + android:layout_marginStart="@dimen/dp_4" + android:src="@drawable/ic_sound_wave" + app:autoPlay="true" /> - + android:layout_marginStart="@dimen/dp_6" + android:textColor="@color/color_1F1B4F" + android:textSize="@dimen/sp_12" + tools:text="60" /> + + + + \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java index f4b4831f1..35dca56e1 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java @@ -313,6 +313,14 @@ public class UserInfo implements Serializable { private long inRoomUid; + @Getter + @Setter + public boolean inMic; + + @Getter + @Setter + public boolean inOnline; + public UserInfo() { } diff --git a/library/src/main/java/com/yizhuan/xchat_android_library/utils/StringCutUtils.java b/library/src/main/java/com/yizhuan/xchat_android_library/utils/StringCutUtils.java new file mode 100644 index 000000000..d719b80fc --- /dev/null +++ b/library/src/main/java/com/yizhuan/xchat_android_library/utils/StringCutUtils.java @@ -0,0 +1,103 @@ +package com.yizhuan.xchat_android_library.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + *

+ * + * @author jiahui + * date 2018/2/28 + */ +public class StringCutUtils { + + private static String regEx = "[\u4e00-\u9fa5]"; // 中文范围 + + /** + * 格式化字符串 + * @param string 原始输入字符串 + * @param maxCount 最大字符限制,中文算作2个字符,其他都算1个字符 + * @return + */ + private static String formatText(String string, int maxCount) { + if ( (string == null || string.length() == 0) + && getChCount(string) > maxCount) { + string = subStrByLen(string, maxCount - 1); + } + return string; + } + + /** + * + * 截取字符串,超出最大字数截断并显示"..." + * @param str 原始字符串 + * @param length 最大字数限制(以最大字数限制7个为例,当含中文时,length应设为2*7,不含中文时设为7) + * @return 处理后的字符串 + */ + public static String subStrByLen(String str, int length) { + if (str == null || str.length() == 0) { + return ""; + } + int chCnt = getStrLen(str); + // 超出进行截断处理 + if (chCnt > length) { + int cur = 0; + int cnt = 0; + StringBuilder sb = new StringBuilder(); + while (cnt <= length && cur < str.length()) { + char nextChar = str.charAt(cur); + if (isChCharacter(String.valueOf(nextChar))) { + cnt += 2; + } else { + cnt++; + } + if (cnt <= length) { + sb.append(nextChar); + } else { + return sb.toString() + "..."; + } + cur++; + } + return sb.toString() + "..."; + } + // 未超出直接返回 + return str; + } + + /** + * 获取字符串中的中文字数 + */ + private static int getChCount(String str) { + int cnt = 0; + Pattern pattern = Pattern.compile(regEx); + Matcher matcher = pattern.matcher(str);; + while(matcher.find()) { + cnt++; + } + return cnt; + } + + /** + * 判断字符是不是中文 + */ + private static boolean isChCharacter(String str) { + if (str == null || str.length() == 0) { + return false; + } + if (str.length() > 1) { + return false; + } + return Pattern.matches(regEx, str); + } + + /** + * 获取字符长度,中文算作2个字符,其他都算1个字符 + */ + public static int getStrLen(String str) { + if (str == null || str.length() == 0) { + return 0; + } + return str.length() + getChCount(str); + } + +}