Java源码示例:com.luck.picture.lib.entity.LocalMedia

示例1
/**
 * 加载更多
 */
private void loadMoreData() {
    long bucketId = getIntent().getLongExtra(PictureConfig.EXTRA_BUCKET_ID, -1);
    mPage++;
    LocalMediaPageLoader.getInstance(getContext(), config).loadPageMediaData(bucketId, mPage, config.pageSize,
            (OnQueryDataResultListener<LocalMedia>) (result, currentPage, isHasMore) -> {
                if (!isFinishing()) {
                    this.isHasMore = isHasMore;
                    if (isHasMore) {
                        int size = result.size();
                        if (size > 0 && adapter != null) {
                            adapter.getData().addAll(result);
                            adapter.notifyDataSetChanged();
                        } else {
                            // 这种情况就是开启过滤损坏文件刚好导致某一页全是损坏的虽然result为0,但还要请求下一页数据
                            loadMoreData();
                        }
                    }
                }
            });
}
 
示例2
/**
 * Verify the validity of the video
 *
 * @param media
 * @return
 */
private boolean checkVideoLegitimacy(LocalMedia media) {
    boolean isEnterNext = true;
    if (PictureMimeType.isHasVideo(media.getMimeType())) {
        if (config.videoMinSecond > 0 && config.videoMaxSecond > 0) {
            // The user sets the minimum and maximum video length to determine whether the video is within the interval
            if (media.getDuration() < config.videoMinSecond || media.getDuration() > config.videoMaxSecond) {
                isEnterNext = false;
                showPromptDialog(getString(R.string.picture_choose_limit_seconds, config.videoMinSecond / 1000, config.videoMaxSecond / 1000));
            }
        } else if (config.videoMinSecond > 0) {
            // The user has only set a minimum video length limit
            if (media.getDuration() < config.videoMinSecond) {
                isEnterNext = false;
                showPromptDialog(getString(R.string.picture_choose_min_seconds, config.videoMinSecond / 1000));
            }
        } else if (config.videoMaxSecond > 0) {
            // Only the maximum length of video is set
            if (media.getDuration() > config.videoMaxSecond) {
                isEnterNext = false;
                showPromptDialog(getString(R.string.picture_choose_max_seconds, config.videoMaxSecond / 1000));
            }
        }
    }
    return isEnterNext;
}
 
示例3
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    LoggerManager.i("onActivityResult", "path:");
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode != mRequestCode) return;
        // 图片、视频、音频选择结果回调
        List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
        // 例如 LocalMedia 里面返回三种path
        // 1.media.getPath(); 为原图path
        // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true  注意:音视频除外
        // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true  注意:音视频除外
        // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
        List<String> list = new ArrayList<>();
        for (LocalMedia item : selectList) {
            list.add(item.getPath());
            LoggerManager.i("onActivityResult", "path:" + item.getPath());
        }
        if (mOnImageSelect != null) {
            mOnImageSelect.onImageSelect(mRequestCode, list);
        }
    }
}
 
示例4
/**
 * 从本地获取数据
 */
private void loadData() {
    long bucketId = getIntent().getLongExtra(PictureConfig.EXTRA_BUCKET_ID, -1);
    mPage++;
    LocalMediaPageLoader.getInstance(getContext(), config).loadPageMediaData(bucketId, mPage, config.pageSize,
            (OnQueryDataResultListener<LocalMedia>) (result, currentPage, isHasMore) -> {
                if (!isFinishing()) {
                    this.isHasMore = isHasMore;
                    if (isHasMore) {
                        int size = result.size();
                        if (size > 0 && adapter != null) {
                            adapter.getData().addAll(result);
                            adapter.notifyDataSetChanged();
                        } else {
                            // 这种情况就是开启过滤损坏文件刚好导致某一页全是损坏的虽然result为0,但还要请求下一页数据
                            loadMoreData();
                        }
                    }
                }
            });
}
 
示例5
@Override
public void onResult(List<LocalMedia> result) {
    for (LocalMedia media : result) {
        Log.i(TAG, "是否压缩:" + media.isCompressed());
        Log.i(TAG, "压缩:" + media.getCompressPath());
        Log.i(TAG, "原图:" + media.getPath());
        Log.i(TAG, "是否裁剪:" + media.isCut());
        Log.i(TAG, "裁剪:" + media.getCutPath());
        Log.i(TAG, "是否开启原图:" + media.isOriginal());
        Log.i(TAG, "原图路径:" + media.getOriginalPath());
        Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
        Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight());
        Log.i(TAG, "Size: " + media.getSize());
        // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息,如旋转角度、经纬度等信息
    }
    if (mAdapterWeakReference.get() != null) {
        mAdapterWeakReference.get().setList(result);
        mAdapterWeakReference.get().notifyDataSetChanged();
    }
}
 
示例6
@Override
public OnResultCallbackListener<LocalMedia> getResultCallbackListener() {
    return new OnResultCallbackListener<LocalMedia>() {
        @Override
        public void onResult(List<LocalMedia> result) {
            // TODO 这种情况是内存极度不足的情况下,比如开启开发者选项中的不保留活动或后台进程限制,导致OnResultCallbackListener被回收
            // 可以在这里进行一些补救措施,通过广播或其他方式将结果推送到相应页面,防止结果丢失的情况
            Log.i(TAG, "onResult:" + result.size());
        }

        @Override
        public void onCancel() {
            Log.i(TAG, "PictureSelector onCancel");
        }
    };
}
 
示例7
@Override
public void onResult(List<LocalMedia> result) {
    for (LocalMedia media : result) {
        Log.i(TAG, "是否压缩:" + media.isCompressed());
        Log.i(TAG, "压缩:" + media.getCompressPath());
        Log.i(TAG, "原图:" + media.getPath());
        Log.i(TAG, "是否裁剪:" + media.isCut());
        Log.i(TAG, "裁剪:" + media.getCutPath());
        Log.i(TAG, "是否开启原图:" + media.isOriginal());
        Log.i(TAG, "原图路径:" + media.getOriginalPath());
        Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
        Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight());
        Log.i(TAG, "Size: " + media.getSize());
        // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息,如旋转角度、经纬度等信息
    }
    if (mAdapterWeakReference.get() != null) {
        mAdapterWeakReference.get().setList(result);
        mAdapterWeakReference.get().notifyDataSetChanged();
    }
}
 
示例8
@Override
protected void initWidgets() {
    super.initWidgets();
    titleViewBg = findViewById(R.id.titleViewBg);
    tvTitle = findViewById(R.id.picture_title);
    ibLeftBack = findViewById(R.id.left_back);
    ibDelete = findViewById(R.id.ib_delete);
    viewPager = findViewById(R.id.preview_pager);
    position = getIntent().getIntExtra(PictureConfig.EXTRA_POSITION, 0);
    images = (List<LocalMedia>) getIntent().getSerializableExtra(PictureConfig.EXTRA_PREVIEW_SELECT_LIST);
    ibLeftBack.setOnClickListener(this);
    ibDelete.setOnClickListener(this);
    ibDelete.setVisibility(config.style != null ? config.style.pictureExternalPreviewGonePreviewDelete
            ? View.VISIBLE : View.GONE : View.GONE);
    initViewPageAdapterData();
}
 
示例9
/**
 * onChangeMediaStatus
 *
 * @param media
 */
private void onChangeMediaStatus(LocalMedia media) {
    if (mGalleryAdapter != null) {
        int itemCount = mGalleryAdapter.getItemCount();
        if (itemCount > 0) {
            boolean isChangeData = false;
            for (int i = 0; i < itemCount; i++) {
                LocalMedia item = mGalleryAdapter.getItem(i);
                if (item == null || TextUtils.isEmpty(item.getPath())) {
                    continue;
                }
                boolean isOldChecked = item.isChecked();
                boolean isNewChecked = item.getPath().equals(media.getPath()) || item.getId() == media.getId();
                if (!isChangeData) {
                    isChangeData = (isOldChecked && !isNewChecked) || (!isOldChecked && isNewChecked);
                }
                item.setChecked(isNewChecked);
            }
            if (isChangeData) {
                mGalleryAdapter.notifyDataSetChanged();
            }
        }
    }
}
 
示例10
@Override
public boolean handleMessage(Message msg) {
    if (mCompressListener == null) return false;

    switch (msg.what) {
        case MSG_COMPRESS_START:
            mCompressListener.onStart();
            break;
        case MSG_COMPRESS_SUCCESS:
            mCompressListener.onSuccess((List<LocalMedia>) msg.obj);
            break;
        case MSG_COMPRESS_ERROR:
            mCompressListener.onError((Throwable) msg.obj);
            break;
    }
    return false;
}
 
示例11
public Builder load(final Uri uri) {
    mStreamProviders.add(new InputStreamAdapter() {
        @Override
        public InputStream openInternal() throws IOException {
            return context.getContentResolver().openInputStream(uri);
        }

        @Override
        public String getPath() {
            return uri.getPath();
        }

        @Override
        public LocalMedia getMedia() {
            return null;
        }
    });
    return this;
}
 
示例12
/**
 * 初始化ViewPage数据
 *
 * @param list
 */
private void initViewPageAdapterData(List<LocalMedia> list) {
    adapter = new PictureSimpleFragmentAdapter(config, this);
    adapter.bindData(list);
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(position);
    setTitle();
    onImageChecked(position);
    LocalMedia media = adapter.getItem(position);
    if (media != null) {
        index = media.getPosition();
        if (config.checkNumMode) {
            tvMediaNum.setSelected(true);
            check.setText(ValueOf.toString(media.getNum()));
            notifyCheckChanged(media);
        }
    }
}
 
示例13
/**
 * set preview image
 *
 * @param position
 * @param medias
 */
public void externalPicturePreview(int position, List<LocalMedia> medias, int enterAnimation) {
    if (!DoubleUtils.isFastDoubleClick()) {
        if (getActivity() != null) {
            Intent intent = new Intent(getActivity(), PictureExternalPreviewActivity.class);
            intent.putParcelableArrayListExtra(PictureConfig.EXTRA_PREVIEW_SELECT_LIST,
                    (ArrayList<? extends Parcelable>) medias);
            intent.putExtra(PictureConfig.EXTRA_POSITION, position);
            getActivity().startActivity(intent);
            getActivity().overridePendingTransition(enterAnimation != 0
                    ? enterAnimation : R.anim.picture_anim_enter, R.anim.picture_anim_fade_in);
        } else {
            throw new NullPointerException("Starting the PictureSelector Activity cannot be empty ");
        }
    }
}
 
示例14
@Override
public void onClick(View v) {
    int id = v.getId();
    if (id == R.id.pictureLeftBack) {
        onBackPressed();
    } else if (id == R.id.iv_play) {
        mVideoView.start();
        iv_play.setVisibility(View.INVISIBLE);
    } else if (id == R.id.tv_confirm) {
        List<LocalMedia> result = new ArrayList<>();
        result.add(getIntent().getParcelableExtra(PictureConfig.EXTRA_MEDIA_KEY));
        setResult(RESULT_OK, new Intent()
                .putParcelableArrayListExtra(PictureConfig.EXTRA_SELECT_LIST,
                        (ArrayList<? extends Parcelable>) result));
        onBackPressed();
    }
}
 
示例15
/**
 * Update Folder
 *
 * @param imageFolders
 */
private void updateMediaFolder(List<LocalMediaFolder> imageFolders, LocalMedia media) {
    File imageFile = new File(media.getRealPath());
    File folderFile = imageFile.getParentFile();
    if (folderFile == null) {
        return;
    }
    int size = imageFolders.size();
    for (int i = 0; i < size; i++) {
        LocalMediaFolder folder = imageFolders.get(i);
        String name = folder.getName();
        if (TextUtils.isEmpty(name)) {
            continue;
        }
        if (name.equals(folderFile.getName())) {
            folder.setFirstImagePath(config.cameraPath);
            folder.setImageNum(folder.getImageNum() + 1);
            folder.setCheckedNum(1);
            folder.getData().add(0, media);
            break;
        }
    }
}
 
示例16
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    LocalMedia item = getItem(position);
    if (item != null) {
        holder.viewBorder.setVisibility(item.isChecked() ? View.VISIBLE : View.GONE);
        if (config != null && PictureSelectionConfig.imageEngine != null) {
            PictureSelectionConfig.imageEngine.loadImage(holder.itemView.getContext(), item.getPath(), holder.ivImage);
        }
        holder.ivPlay.setVisibility(PictureMimeType.isHasVideo(item.getMimeType()) ? View.VISIBLE : View.GONE);
        holder.itemView.setOnClickListener(v -> {
            if (listener != null && holder.getAdapterPosition() >= 0) {
                listener.onItemClick(holder.getAdapterPosition(), getItem(position), v);
            }
        });
    }
}
 
示例17
public void bindSelectData(List<LocalMedia> images) {
    // 这里重新构构造一个新集合,不然会产生已选集合一变,结果集合也会添加的问题
    List<LocalMedia> selection = new ArrayList<>();
    int size = images.size();
    for (int i = 0; i < size; i++) {
        LocalMedia media = images.get(i);
        selection.add(media);
    }
    this.selectData = selection;
    if (!config.isSingleDirectReturn) {
        subSelectPosition();
        if (imageSelectChangedListener != null) {
            imageSelectChangedListener.onChange(selectData);
        }
    }
}
 
示例18
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 判断是否属于图片选择
    if (resultCode == Activity.RESULT_OK && data != null) {
        LocalMedia localMedia = PictureSelectorUtils.getSingleMedia(data);
        // 获取图片地址
        String imgPath = PictureSelectorUtils.getLocalMediaPath(localMedia, true);
        // 获取图片 Bitmap
        selectBitmap = ImageUtils.decodeFile(imgPath);
        // 设置图片滤镜
        setFilter();
    }
}
 
示例19
/**
 * Just make sure you pick one
 */
private void singleRadioMediaImage() {
    List<LocalMedia> selectData = mAdapter.getSelectedData();
    if (selectData != null
            && selectData.size() > 0) {
        LocalMedia media = selectData.get(0);
        int position = media.getPosition();
        selectData.clear();
        mAdapter.notifyItemChanged(position);
    }
}
 
示例20
/**
 * 设置LocalMedia旋转信息
 *
 * @param context
 * @param media
 * @param isAndroidQChangeWH
 * @return
 */
public static void setOrientationSynchronous(Context context, LocalMedia media,
                                             boolean isAndroidQChangeWH,
                                             boolean isAndroidQChangeVideoWH) {
    if (PictureMimeType.isHasImage(media.getMimeType())) {
        if (!isAndroidQChangeWH) {
            return;
        }
    }
    if (PictureMimeType.isHasVideo(media.getMimeType())) {
        if (!isAndroidQChangeVideoWH) {
            return;
        }
    }
    // 如果有旋转信息图片宽高则是相反
    int orientation = 0;
    if (PictureMimeType.isHasImage(media.getMimeType())) {
        orientation = MediaUtils.getImageOrientationForUrl(context, media.getPath());
    } else if (PictureMimeType.isHasVideo(media.getMimeType())) {
        if (PictureMimeType.isContent(media.getPath())) {
            orientation = MediaUtils.getVideoOrientationForUri(context, Uri.parse(media.getPath()));
        } else {
            orientation = MediaUtils.getVideoOrientationForUrl(media.getPath());
        }
    }
    if (orientation == ExifInterface.ORIENTATION_ROTATE_90
            || orientation == ExifInterface.ORIENTATION_ROTATE_270) {
        int width = media.getWidth();
        int height = media.getHeight();
        media.setWidth(height);
        media.setHeight(width);
    }
    media.setOrientation(orientation);
}
 
示例21
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 判断是否属于图片选择
    if (resultCode == Activity.RESULT_OK && data != null) {
        LocalMedia localMedia = PictureSelectorUtils.getSingleMedia(data);
        // 获取图片地址
        String imgPath = PictureSelectorUtils.getLocalMediaPath(localMedia, true);
        // 获取图片 Bitmap
        Bitmap selectBitmap = ImageUtils.decodeFile(imgPath);
        // 解析图片
        ZXingQRCodeUtils.decodeQRCode(selectBitmap, new ZXingQRCodeUtils.QRScanCallBack() {
            @Override
            public void onResult(boolean success, Result result, Exception e) {
                HandlerUtils.postRunnable(new Runnable() {
                    @Override
                    public void run() {
                        if (success) {
                            handleDecode(result, new Bundle());
                        } else {
                            showToast(false, "图片非二维码 / 识别失败");
                        }
                    }
                });
            }
        });
    }
}
 
示例22
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 判断是否属于图片选择
    if (resultCode == Activity.RESULT_OK && data != null) {
        LocalMedia localMedia = PictureSelectorUtils.getSingleMedia(data);
        // 获取图片地址
        String imgPath = PictureSelectorUtils.getLocalMediaPath(localMedia, true);
        // 获取图片 Bitmap
        selectBitmap = ImageUtils.decodeFile(imgPath);
        // 设置图片滤镜
        setFilter();
    }
}
 
示例23
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            case PictureConfig.CHOOSE_REQUEST:
                // 图片选择结果回调
                List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
                // 例如 LocalMedia 里面返回五种path
                // 1.media.getPath(); 为原图path
                // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true
                // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true
                // 4.media.getOriginalPath()); media.isOriginal());为true时此字段才有值
                // 5.media.getAndroidQToPath();为Android Q版本特有返回的字段,此字段有值就用来做上传使用
                // 如果同时开启裁剪和压缩,则取压缩路径为准因为是先裁剪后压缩
                for (LocalMedia media : selectList) {
                    Log.i(TAG, "是否压缩:" + media.isCompressed());
                    Log.i(TAG, "压缩:" + media.getCompressPath());
                    Log.i(TAG, "原图:" + media.getPath());
                    Log.i(TAG, "是否裁剪:" + media.isCut());
                    Log.i(TAG, "裁剪:" + media.getCutPath());
                    Log.i(TAG, "是否开启原图:" + media.isOriginal());
                    Log.i(TAG, "原图路径:" + media.getOriginalPath());
                    Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
                }
                mAdapter.setList(selectList);
                mAdapter.notifyDataSetChanged();
                break;
        }
    }
}
 
示例24
@Override
public void onItemClick(int position, boolean isCameraFolder, long bucketId, String
        folderName, List<LocalMedia> data) {
    boolean camera = config.isCamera && isCameraFolder;
    mAdapter.setShowCamera(camera);
    mTvPictureTitle.setText(folderName);
    long currentBucketId = ValueOf.toLong(mTvPictureTitle.getTag(R.id.view_tag));
    mTvPictureTitle.setTag(R.id.view_count_tag, folderWindow.getFolder(position) != null
            ? folderWindow.getFolder(position).getImageNum() : 0);
    if (config.isPageStrategy) {
        if (currentBucketId != bucketId) {
            setLastCacheFolderData();
            boolean isCurrentCacheFolderData = isCurrentCacheFolderData(position);
            if (!isCurrentCacheFolderData) {
                mPage = 1;
                showPleaseDialog();
                LocalMediaPageLoader.getInstance(getContext(), config).loadPageMediaData(bucketId, mPage,
                        (OnQueryDataResultListener<LocalMedia>) (result, currentPage, isHasMore) -> {
                            this.isHasMore = isHasMore;
                            if (!isFinishing()) {
                                if (result.size() == 0) {
                                    mAdapter.clear();
                                }
                                mAdapter.bindData(result);
                                mRecyclerView.onScrolled(0, 0);
                                mRecyclerView.smoothScrollToPosition(0);
                                dismissDialog();
                            }
                        });
            }
        }
    } else {
        mAdapter.bindData(data);
        mRecyclerView.smoothScrollToPosition(0);
    }
    mTvPictureTitle.setTag(R.id.view_tag, bucketId);
    folderWindow.dismiss();
}
 
示例25
@Override
public void onCustomPreviewCallback(Context context, List<LocalMedia> previewData, int currentPosition) {
    // TODO context特指PictureSelectorActivity
    if (previewData != null && previewData.size() > 0) {
        LocalMedia currentLocalMedia = previewData.get(currentPosition);
        if (currentLocalMedia != null) {

        }
    }
}
 
示例26
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case PictureConfig.CHOOSE_REQUEST:
                // 图片选择结果回调
                List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
                // 例如 LocalMedia 里面返回五种path
                // 1.media.getPath(); 原图path
                // 2.media.getCutPath();裁剪后path,需判断media.isCut();切勿直接使用
                // 3.media.getCompressPath();压缩后path,需判断media.isCompressed();切勿直接使用
                // 4.media.getOriginalPath()); media.isOriginal());为true时此字段才有值
                // 5.media.getAndroidQToPath();Android Q版本特有返回的字段,但如果开启了压缩或裁剪还是取裁剪或压缩路径;注意:.isAndroidQTransform 为false 此字段将返回空
                // 如果同时开启裁剪和压缩,则取压缩路径为准因为是先裁剪后压缩
                for (LocalMedia media : selectList) {
                    Log.i(TAG, "是否压缩:" + media.isCompressed());
                    Log.i(TAG, "压缩:" + media.getCompressPath());
                    Log.i(TAG, "原图:" + media.getPath());
                    Log.i(TAG, "是否裁剪:" + media.isCut());
                    Log.i(TAG, "裁剪:" + media.getCutPath());
                    Log.i(TAG, "是否开启原图:" + media.isOriginal());
                    Log.i(TAG, "原图路径:" + media.getOriginalPath());
                    Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
                    Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight());
                    Log.i(TAG, "Size: " + media.getSize());

                    // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息,如旋转角度、经纬度等信息
                }
                mAdapter.setList(selectList);
                mAdapter.notifyDataSetChanged();
                break;
        }
    }
}
 
示例27
/**
 * singleDirectReturn
 *
 * @param mimeType
 */
private void singleDirectReturnCameraHandleResult(String mimeType) {
    boolean isHasImage = PictureMimeType.isHasImage(mimeType);
    if (config.enableCrop && isHasImage) {
        config.originalPath = config.cameraPath;
        startCrop(config.cameraPath, mimeType);
    } else if (config.isCompress && isHasImage) {
        List<LocalMedia> selectedImages = mAdapter.getSelectedData();
        compressImage(selectedImages);
    } else {
        onResult(mAdapter.getSelectedData());
    }
}
 
示例28
@Override
protected void onSelectedChange(boolean isAddRemove, LocalMedia media) {
    if (isAddRemove) {
        media.setChecked(true);
        if (config.selectionMode == PictureConfig.SINGLE) {
            mGalleryAdapter.addSingleMediaToData(media);
        }
    } else {
        media.setChecked(false);
        mGalleryAdapter.removeMediaToData(media);
        if (isBottomPreview) {
            if (selectData != null && selectData.size() > position) {
                selectData.get(position).setChecked(true);
            }
            if (mGalleryAdapter.isDataEmpty()) {
                onActivityBackPressed();
            } else {
                int currentItem = viewPager.getCurrentItem();
                adapter.remove(currentItem);
                adapter.removeCacheView(currentItem);
                position = currentItem;
                tvTitle.setText(getString(R.string.picture_preview_image_num,
                        position + 1, adapter.getSize()));
                check.setSelected(true);
                adapter.notifyDataSetChanged();
            }
        }
    }
    int itemCount = mGalleryAdapter.getItemCount();
    if (itemCount > 5) {
        mRvGallery.smoothScrollToPosition(itemCount - 1);
    }
}
 
示例29
@Override
protected void onPageSelectedChange(LocalMedia media) {
    super.onPageSelectedChange(media);
    goneParent();
    if (!config.previewEggs) {
        onChangeMediaStatus(media);
    }
}
 
示例30
/**
 * Returns a file with a cache image name in the private cache directory.
 *
 * @param context A context.
 */
private File getImageCacheFile(Context context, InputStreamProvider provider, String suffix) {
    if (TextUtils.isEmpty(mTargetDir)) {
        File imageCacheDir = getImageCacheDir(context);
        if (imageCacheDir != null) {
            mTargetDir = imageCacheDir.getAbsolutePath();
        }
    }
    String cacheBuilder = "";
    try {
        LocalMedia media = provider.getMedia();
        String encryptionValue = StringUtils.getEncryptionValue(media.getPath(), media.getWidth(), media.getHeight());
        if (!TextUtils.isEmpty(encryptionValue) && !media.isCut()) {
            cacheBuilder = mTargetDir + "/" +
                    "IMG_CMP_" +
                    encryptionValue +
                    (TextUtils.isEmpty(suffix) ? ".jpg" : suffix);
        } else {
            cacheBuilder = mTargetDir +
                    "/" +
                    DateUtils.getCreateFileName("IMG_CMP_") +
                    (TextUtils.isEmpty(suffix) ? ".jpg" : suffix);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return new File(cacheBuilder);
}