package com.netease.nim.demo.session.viewholder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.netease.nim.demo.R; import com.netease.nim.demo.session.activity.WatchSnapChatPictureActivity; import com.netease.nim.demo.session.extension.SnapChatAttachment; import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; import com.netease.nim.uikit.common.util.file.AttachmentStore; import com.netease.nim.uikit.common.util.string.StringUtil; import com.netease.nim.uikit.session.viewholder.MsgViewHolderBase; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.msg.MsgService; import com.netease.nimlib.sdk.msg.constant.AttachStatusEnum; import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum; /** * Created by zhoujianghua on 2015/8/7. */ public class MsgViewHolderSnapChat extends MsgViewHolderBase { private ImageView thumbnailImageView; protected View progressCover; private TextView progressLabel; private boolean isLongClick = false; public MsgViewHolderSnapChat(BaseMultiItemFetchLoadAdapter adapter) { super(adapter); } @Override protected int getContentResId() { return R.layout.nim_message_item_snapchat; } @Override protected void inflateContentView() { thumbnailImageView = (ImageView) view.findViewById(R.id.message_item_snap_chat_image); progressBar = findViewById(R.id.message_item_thumb_progress_bar); // 覆盖掉 progressCover = findViewById(R.id.message_item_thumb_progress_cover); progressLabel = (TextView) view.findViewById(R.id.message_item_thumb_progress_text); } @Override protected void bindContentView() { contentContainer.setOnTouchListener(onTouchListener); layoutByDirection(); refreshStatus(); } private void refreshStatus() { thumbnailImageView.setBackgroundResource(isReceivedMessage() ? R.drawable.message_view_holder_left_snapchat : R.drawable.message_view_holder_right_snapchat); if (message.getStatus() == MsgStatusEnum.sending || message.getAttachStatus() == AttachStatusEnum.transferring) { progressCover.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE); } else { progressCover.setVisibility(View.GONE); } progressLabel.setText(StringUtil.getPercentString(getMsgAdapter().getProgress(message))); readReceiptTextView.setVisibility(View.GONE); } protected View.OnTouchListener onTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: v.getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: v.getParent().requestDisallowInterceptTouchEvent(false); WatchSnapChatPictureActivity.destroy(); // 删除这条消息,当然你也可以将其标记为已读,同时删除附件内容,然后不让再查看 if (isLongClick && message.getAttachStatus() == AttachStatusEnum.transferred) { // 物理删除 NIMClient.getService(MsgService.class).deleteChattingHistory(message); AttachmentStore.delete(((SnapChatAttachment) message.getAttachment()).getPath()); AttachmentStore.delete(((SnapChatAttachment) message.getAttachment()).getThumbPath()); getMsgAdapter().deleteItem(message, true); isLongClick = false; } break; } return false; } }; @Override protected boolean onItemLongClick() { if (message.getStatus() == MsgStatusEnum.success) { WatchSnapChatPictureActivity.start(context, message); isLongClick = true; return true; } return false; } @Override protected int leftBackground() { return 0; } @Override protected int rightBackground() { return 0; } private void layoutByDirection() { View body = findViewById(R.id.message_item_snap_chat_body); View tipsLayout = findViewById(R.id.message_item_tips_layout); View tips = findViewById(R.id.message_item_snap_chat_tips_label); View readed = findViewById(R.id.message_item_snap_chat_readed); ViewGroup container = (ViewGroup) body.getParent(); container.removeView(tipsLayout); if (isReceivedMessage()) { container.addView(tipsLayout, 1); } else { container.addView(tipsLayout, 0); } if (message.getStatus() == MsgStatusEnum.success) { tips.setVisibility(View.VISIBLE); } else { tips.setVisibility(View.GONE); } if (!TextUtils.isEmpty(getMsgAdapter().getUuid()) && message.getUuid().equals(getMsgAdapter().getUuid())) { readed.setVisibility(View.VISIBLE); } else { readed.setVisibility(View.GONE); } } }