Search in sources :

Example 1 with FolderAdapter

use of com.marshalchen.common.uimodule.multi_image_selector.adapter.FolderAdapter in project UltimateAndroid by cymcsg.

the class MultiImageSelectorFragment method onViewCreated.

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // 选择图片数量
    mDesireImageCount = getArguments().getInt(EXTRA_SELECT_COUNT);
    // 图片选择模式
    final int mode = getArguments().getInt(EXTRA_SELECT_MODE);
    // 默认选择
    if (mode == MODE_MULTI) {
        ArrayList<String> tmp = getArguments().getStringArrayList(EXTRA_DEFAULT_SELECTED_LIST);
        if (tmp != null && tmp.size() > 0) {
            resultList = tmp;
        }
    }
    // 是否显示照相机
    final boolean showCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true);
    mImageAdapter = new ImageGridAdapter(getActivity(), showCamera);
    // 是否显示选择指示器
    mImageAdapter.showSelectIndicator(mode == MODE_MULTI);
    // 如果显示了照相机,则创建临时文件
    if (showCamera) {
        mTmpFile = FileUtils.createTmpFile(getActivity());
    }
    mPopupAnchorView = view.findViewById(R.id.footer);
    mTimeLineText = (TextView) view.findViewById(R.id.timeline_area);
    // 初始化,先隐藏当前timeline
    mTimeLineText.setVisibility(View.GONE);
    mCategoryText = (TextView) view.findViewById(R.id.category_btn);
    // 初始化,加载所有图片
    mCategoryText.setText("folder_all");
    mCategoryText.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            if (mFolderPopupWindow.isShowing()) {
                mFolderPopupWindow.dismiss();
            } else {
                mFolderPopupWindow.show();
                int index = mFolderAdapter.getSelectIndex();
                index = index == 0 ? index : index - 1;
                mFolderPopupWindow.getListView().setSelection(index);
            }
        }
    });
    mPreviewBtn = (Button) view.findViewById(R.id.preview);
    // 初始化,按钮状态初始化
    if (resultList == null || resultList.size() <= 0) {
        mPreviewBtn.setText("preview");
        mPreviewBtn.setEnabled(false);
    }
    mPreviewBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
        // TODO 预览
        }
    });
    mGridView = (GridView) view.findViewById(R.id.grid);
    mGridView.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView absListView, int state) {
            final Picasso picasso = Picasso.with(getActivity());
            if (state == SCROLL_STATE_IDLE || state == SCROLL_STATE_TOUCH_SCROLL) {
                picasso.resumeTag(getActivity());
            } else {
                picasso.pauseTag(getActivity());
            }
            if (state == SCROLL_STATE_IDLE) {
                // 停止滑动,日期指示器消失
                mTimeLineText.setVisibility(View.GONE);
            } else if (state == SCROLL_STATE_FLING) {
                mTimeLineText.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (mTimeLineText.getVisibility() == View.VISIBLE) {
                int index = firstVisibleItem + 1 == view.getAdapter().getCount() ? view.getAdapter().getCount() - 1 : firstVisibleItem + 1;
                Image image = (Image) view.getAdapter().getItem(index);
                if (image != null) {
                    mTimeLineText.setText(TimeUtils.formatPhotoDate(image.path));
                }
            }
        }
    });
    mGridView.setAdapter(mImageAdapter);
    mGridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        public void onGlobalLayout() {
            final int width = mGridView.getWidth();
            final int height = mGridView.getHeight();
            final int desireSize = getResources().getDimensionPixelOffset(R.dimen.multi_image_select_image_size);
            final int numCount = width / desireSize;
            final int columnSpace = getResources().getDimensionPixelOffset(R.dimen.multi_image_select_space_size);
            int columnWidth = (width - columnSpace * (numCount - 1)) / numCount;
            mImageAdapter.setItemSize(columnWidth);
            if (mFolderPopupWindow == null) {
                createPopupFolderList(width, height);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                mGridView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });
    mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if (mImageAdapter.isShowCamera()) {
                // 如果显示照相机,则第一个Grid显示为照相机,处理特殊逻辑
                if (i == 0) {
                    showCameraAction();
                } else {
                    // 正常操作
                    Image image = (Image) adapterView.getAdapter().getItem(i);
                    selectImageFromGrid(image, mode);
                }
            } else {
                // 正常操作
                Image image = (Image) adapterView.getAdapter().getItem(i);
                selectImageFromGrid(image, mode);
            }
        }
    });
    mFolderAdapter = new FolderAdapter(getActivity());
}
Also used : ImageGridAdapter(com.marshalchen.common.uimodule.multi_image_selector.adapter.ImageGridAdapter) AbsListView(android.widget.AbsListView) Image(com.marshalchen.common.uimodule.multi_image_selector.bean.Image) GridView(android.widget.GridView) View(android.view.View) AdapterView(android.widget.AdapterView) AbsListView(android.widget.AbsListView) TextView(android.widget.TextView) FolderAdapter(com.marshalchen.common.uimodule.multi_image_selector.adapter.FolderAdapter) Picasso(com.squareup.picasso.Picasso) AdapterView(android.widget.AdapterView) ViewTreeObserver(android.view.ViewTreeObserver) TargetApi(android.annotation.TargetApi)

Aggregations

TargetApi (android.annotation.TargetApi)1 View (android.view.View)1 ViewTreeObserver (android.view.ViewTreeObserver)1 AbsListView (android.widget.AbsListView)1 AdapterView (android.widget.AdapterView)1 GridView (android.widget.GridView)1 TextView (android.widget.TextView)1 FolderAdapter (com.marshalchen.common.uimodule.multi_image_selector.adapter.FolderAdapter)1 ImageGridAdapter (com.marshalchen.common.uimodule.multi_image_selector.adapter.ImageGridAdapter)1 Image (com.marshalchen.common.uimodule.multi_image_selector.bean.Image)1 Picasso (com.squareup.picasso.Picasso)1