基于IM IMKit 修改列表以及聊天界面的头像

2 篇文章 0 订阅

IMKit提供的界面头像加载被压变形,由此接到测试提出的修改要求,作为万能码农的我们自当是尽力满足。。。

1、列表头像修改
需要重写两个文件ConversationListFragment和ConversationListAdapter
具体如下:

public class ChatConversationListFragment extends ConversationListFragment {

    @Override
    public ConversationListAdapter onResolveAdapter(Context context) {

        return new ChatConversationListAdapter(context);
    }

    @Override
    public void onResume() {
        super.onResume();
        MobclickAgent.onPageStart("ConversationListFragment");
    }

    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPageEnd("ConversationListFragment");
    }
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

public class ChatConversationListAdapter extends ConversationListAdapter {

    private  Context mContext;
    public ChatConversationListAdapter(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    protected void bindView(View v, int position, UIConversation data) {
        ViewHolder holder = (ViewHolder) v.getTag();

        super.bindView(v, position, data);

        if (data != null) {
            ConversationProviderTag tag = RongContext.getInstance().getConversationProviderTag(data.getConversationType().getName());
            if (tag.portraitPosition() == 1) {
                Glide.with(mContext).load(data.getIconUrl()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.leftImageView);
            } else if (tag.portraitPosition() == 2) {
                Glide.with(mContext).load(data.getIconUrl()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.rightImageView);
            }
        }
    }
}
  • 使用方式:
private Fragment initConversationList() {
            if (mConversationListFragment == null) {
                ConversationListFragment listFragment = new **ChatConversationListFragment**();
                Uri uri;
                uri = Uri.parse("rong://" + ChatActivity.this.getApplication().getPackageName()).buildUpon()
                        .appendPath("conversationlist")
                        .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示
                        .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")//群组
                        .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号
                        .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号
                        .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统
                        .build();
                mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,
                        Conversation.ConversationType.GROUP,
                        Conversation.ConversationType.PUBLIC_SERVICE,
                        Conversation.ConversationType.APP_PUBLIC_SERVICE,
                        Conversation.ConversationType.SYSTEM
                };
                listFragment.setUri(uri);
                mConversationListFragment = listFragment;
                return listFragment;
            } else {
                return mConversationListFragment;
            }
        }

2、聊天界面头像修改
需要重写两个文件ConversationFragment和MessageListAdapter
如下

public class ChatConversationFragment extends ConversationFragment {

    @Override
    public MessageListAdapter onResolveAdapter(Context context) {
        return new ChatMessageListAdapter(context);
    }
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++

public class ChatMessageListAdapter extends MessageListAdapter {
    private Context mContext;
    public ChatMessageListAdapter(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    protected void bindView(View v, int position, UIMessage data) {
        super.bindView(v, position, data);
        ViewHolder holder = (ViewHolder) v.getTag();
        if (data != null) {
            UserInfo userInfo = data.getUserInfo();
            ConversationKey mKey;
            Uri portrait;
            PublicServiceProfile publicServiceProfile;
            if (holder.rightIconView.getVisibility() == View.VISIBLE) {
                userInfo = data.getUserInfo();
                portrait = null;
                if (data.getConversationType().equals(Conversation.ConversationType.CUSTOMER_SERVICE) && data.getUserInfo() != null && data.getMessageDirection().equals(Message.MessageDirection.RECEIVE)) {
                    if (userInfo != null) {
                        portrait = userInfo.getPortraitUri();
                    }

                    Glide.with(mContext).load(portrait.toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.rightIconView);

                } else if ((data.getConversationType().equals(Conversation.ConversationType.PUBLIC_SERVICE) || data.getConversationType().equals(Conversation.ConversationType.APP_PUBLIC_SERVICE)) && data.getMessageDirection().equals(Message.MessageDirection.RECEIVE)) {
                    if (userInfo != null) {
                        portrait = userInfo.getPortraitUri();
                        Glide.with(mContext).load(portrait.toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.rightIconView);
                    } else {
                        mKey = ConversationKey.obtain(data.getTargetId(), data.getConversationType());
                        publicServiceProfile = RongContext.getInstance().getPublicServiceInfoFromCache(mKey.getKey());
                        portrait = publicServiceProfile.getPortraitUri();
                        Glide.with(mContext).load(portrait.toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.rightIconView);
                    }
                } else if (!TextUtils.isEmpty(data.getSenderUserId())) {
                    if (userInfo == null) {
                        userInfo = RongUserInfoManager.getInstance().getUserInfo(data.getSenderUserId());
                    }

                    if (userInfo != null && userInfo.getPortraitUri() != null) {
                        Glide.with(mContext).load(userInfo.getPortraitUri().toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.rightIconView);
                    } else {
                        holder.rightIconView.setAvatar((String)null, 0);
                    }
                }
            } else if (holder.leftIconView.getVisibility() == View.VISIBLE) {
                userInfo = data.getUserInfo();

                if (data.getConversationType().equals(Conversation.ConversationType.CUSTOMER_SERVICE) && data.getMessageDirection().equals(Message.MessageDirection.RECEIVE)) {
                    if (userInfo != null) {
                        portrait = userInfo.getPortraitUri();
                        Glide.with(mContext).load(portrait.toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.leftIconView);
                    }
                } else if ((data.getConversationType().equals(Conversation.ConversationType.PUBLIC_SERVICE) || data.getConversationType().equals(Conversation.ConversationType.APP_PUBLIC_SERVICE)) && data.getMessageDirection().equals(Message.MessageDirection.RECEIVE)) {
                    if (userInfo != null) {
                        portrait = userInfo.getPortraitUri();
                        Glide.with(mContext).load(portrait.toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.leftIconView);
                    } else {
                        mKey = ConversationKey.obtain(data.getTargetId(), data.getConversationType());
                        publicServiceProfile = RongContext.getInstance().getPublicServiceInfoFromCache(mKey.getKey());
                        if (publicServiceProfile != null && publicServiceProfile.getPortraitUri() != null) {
                            Glide.with(mContext).load(publicServiceProfile.getPortraitUri().toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.leftIconView);
                        } else {
                            holder.leftIconView.setAvatar((String)null, 0);
                        }
                    }
                } else if (!TextUtils.isEmpty(data.getSenderUserId())) {
                    if (userInfo == null) {
                        userInfo = RongUserInfoManager.getInstance().getUserInfo(data.getSenderUserId());
                    }

                    if (userInfo != null && userInfo.getPortraitUri() != null) {
                        Glide.with(mContext).load(userInfo.getPortraitUri().toString()).apply(RequestOptions.bitmapTransform(new CircleCrop()).error(R.drawable.default_photo).placeholder(R.drawable.default_photo)).into(holder.leftIconView);
                    } else {
                        holder.leftIconView.setAvatar((String)null, 0);
                    }
                }
            }
        }
    }
}

MessageListAdapter判断条件有点多,照着父类抄过来,然后加载到对应的view就行了

  • 使用方式
<fragment
        android:id="@+id/conversation"
        android:name="com.droi.mjpet.ryChat.**ChatConversationFragment**"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值