コード例 #1
0
  /**
   * @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;
  }
コード例 #2
0
  /**
   * @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);
    }
  }