1、附件的引入
附件UI,对于会话编辑界面来说是最重要也是最复杂的一个组成部分,与彩信息息相关。该界面的功能主要是提供给用户添加、删除、替换彩信附件。附件对大家来说应该不陌生,彩信的附件无外乎就是添加的多媒体文件,但是在android程序设计中将附件抽象为一个“SlideshowModel”,神马意思了?SlideshowModel中文含义就是幻灯片,那一个幻灯片可能有很多”组成页“,”组成页“就是幻灯片基本组成单元,在程序中将一个基本组成单元抽象为一个”SlideModel“,SlideModel既然是”页“的概念,如果尝试使用过ppt的同学,肯定知道幻灯片每一页里面又包含很多的元素,如可以添加图片、音频、视频、文本,这些添加的元素在android 中都定义成一个抽象元素:ImageModel 、AudioModel、VedioModel、TextModel。
小结一下,SlideShowModel就是附件的抽象,它包含很多的SlideModel页,每个SlideModel又包含不同的ImageModel、AudioModel、VedioModel、TextModel元素。
2、附件相关核心类的类图
Model 类图
附件view类 图
3、UI简单介绍
附件编辑UI只有是彩信的情况且我们添加了附件才会呈现,如果我们编辑的是一条普通的短信该UI就会隐藏,那这是怎么做到的?首先来看看编辑短信界面ComposeMessageActivity的onCreate方法会调用相关方法初始化附件相关的view,mAttachmentEditorHandler该Handler需要注意,对于幻灯片的编辑要靠它来实现。如下所示是view的初始化
mAttachmentEditor = (AttachmentEditor) findViewById(R.id.attachment_editor);
mAttachmentEditor.setHandler(mAttachmentEditorHandler);
然后再根据当前编辑的信息是否含有附件如果有附件则显示附件,如果没有附件UI则隐藏。
mAttachmentEditor.update(mWorkingMessage);
其核心实现放在AttachmentEditor的update方法中
public void update(WorkingMessage msg) {
hideView();隐藏附件ui
mView = null;
// If there's no attachment, we have nothing to do.
if (!msg.hasAttachment()) {
return; 如果没有附件,则隐藏附件ui
}
// Get the slideshow from the message.
mSlideshow = msg.getSlideshow();
//add by zaokun ,used gain message's attach size
if(mSlideshow!=null){
showSize = (mSlideshow.getCurrentMessageSize() - 1)/1024 + 1;
}
mView = createView();创建对应的view,通过加载不同的布局来实现
if ((mPresenter == null) || !mSlideshow.equals(mPresenter.getModel())) {
mPresenter = PresenterFactory.getPresenter(
"MmsThumbnailPresenter", mContext, mView, mSlideshow);
} else {
mPresenter.setView(mView);
}