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" />