/** * @param index 小于0则顺序插入(插入至最末尾);大于等于0则按指定索引值(index)插入 * @param childView * @return */ public boolean addChildView(int index, View childView) { if (childViews.contains(childView)) { return false; } if (null == childView.getTag()) { // 结构层操作 // tag为null说明此view在添加至文件夹内之前是处于桌面上的,所以需要将其从根文件夹对象中删除 GlobalDataCacheForMemorySingleton.getInstance .getRootDirectory() .getListFiles() .remove(((DragView) childView).getBookFile()); } else { ((BookFolderLayout) childView.getTag()).removeChildView(childView, true); } if (null != childView.getParent()) { ((ViewGroup) childView.getParent()).removeView(childView); } if (index < 0) { childViews.add(childView); } else { childViews.add(index, childView); } // 生成缩略图控件 BookThumbnailLayout bookThumbnailLayout = new BookThumbnailLayout(getContext()); bookThumbnailLayout.bind((BookShelfBookCell) childView); childView.setTag(R.id.bookThumbnailView, bookThumbnailLayout); MyGridLayout.LayoutParams layoutParams = new MyGridLayout.LayoutParams(); layoutParams.width = (int) getResources().getDimension(R.dimen.book_cell_width) / 3; layoutParams.height = (int) getResources().getDimension(R.dimen.book_image_height) / 3; layoutParams.topMargin = 4; layoutParams.leftMargin = 4; layoutParams.rightMargin = 4; layoutParams.bottomMargin = 4; // 顺序插入时,封面只显示前4本书 if (index < 0) { if (gridLayout.getChildCount() < 4) { gridLayout.addView(bookThumbnailLayout, layoutParams); } } // 指定插入时,若索引值小于4则需将封面上多余的一张缩略图(即原第4张)删除 else if (index < 4) { if (gridLayout.getChildCount() == 4) { gridLayout.removeViewAt(3); } gridLayout.addView(bookThumbnailLayout, index, layoutParams); } childView.setTag(this); updateFrontCover(); // 刷新封面 return true; }
/** * @param childView 要删除的视图 * @param isDeleteFolder 是否删除只剩一本书的文件夹 */ public void removeChildView(View childView, boolean isDeleteFolder) { childView.setTag(null); if (childViews.contains(childView)) { childViews.remove(childView); } View bookThumbnailView = (View) childView.getTag(R.id.bookThumbnailView); int bookFaceIndex = gridLayout.indexOfChild(bookThumbnailView); gridLayout.removeView(bookThumbnailView); // 删除文件夹封面上显示的书籍缩略图 /** 如果删除的是前4本书中的其中一本,且删除后文件夹内至少还有4本书,则需要更新文件夹封面,将第4本书的缩略图进行补位 */ if (bookFaceIndex >= 0 && childViews.size() >= 4) { View bookFaceImageView = (View) childViews.get(3).getTag(R.id.bookThumbnailView); if (bookFaceImageView.getParent() != null) { ((ViewGroup) bookFaceImageView.getParent()).removeView(bookFaceImageView); } MyGridLayout.LayoutParams layoutParams = new MyGridLayout.LayoutParams(); layoutParams.width = (int) getResources().getDimension(R.dimen.book_cell_width) / 3; layoutParams.height = (int) getResources().getDimension(R.dimen.book_image_height) / 3; layoutParams.topMargin = 4; layoutParams.leftMargin = 4; layoutParams.rightMargin = 4; layoutParams.bottomMargin = 4; gridLayout.addView(bookFaceImageView, 3, layoutParams); } if (null != childView.getParent()) { ((ViewGroup) childView.getParent()).removeView(childView); } // 结构层操作 bookFile.getListFiles().remove(((DragView) childView).getBookFile()); // 如果不需要自动删除只剩一本书籍的文件夹则在此处直接返回,终止方法体 if (!isDeleteFolder) { return; } updateFrontCover(); // 刷新封面 /** 该文件夹没有书籍时,则删除该文件夹 */ if (0 == childViews.size()) { ViewGroup viewGroup = (ViewGroup) this.getParent(); BookFile rootBookFile = GlobalDataCacheForMemorySingleton.getInstance.getRootDirectory(); viewGroup.removeView(this); // 结构层操作 rootBookFile.getListFiles().remove(bookFile); } }