Skip to content

Commit

Permalink
1. 优化拍摄界面的横向多图功能,现在可同时进行删除点击操作并且不会闪退了
Browse files Browse the repository at this point in the history
  • Loading branch information
aaatttcccc committed Jun 2, 2022
1 parent 00e8c53 commit 70152b4
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 74 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
package com.zhongjh.albumcamerarecorder.camera;

import static com.otaliastudios.cameraview.controls.Mode.PICTURE;
import static com.otaliastudios.cameraview.controls.Mode.VIDEO;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_AUTO;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_OFF;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_ON;
import static com.zhongjh.albumcamerarecorder.utils.MediaStoreUtils.MediaTypes.TYPE_PICTURE;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_BOTH;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_CLICK_AND_HOLD;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_ONLY_CLICK;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_ONLY_LONG_CLICK;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
Expand Down Expand Up @@ -69,17 +80,6 @@

import it.sephiroth.android.library.imagezoom.ImageViewTouch;

import static com.otaliastudios.cameraview.controls.Mode.PICTURE;
import static com.otaliastudios.cameraview.controls.Mode.VIDEO;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_AUTO;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_OFF;
import static com.zhongjh.albumcamerarecorder.camera.constants.FlashModels.TYPE_FLASH_ON;
import static com.zhongjh.albumcamerarecorder.utils.MediaStoreUtils.MediaTypes.TYPE_PICTURE;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_BOTH;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_CLICK_AND_HOLD;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_ONLY_CLICK;
import static com.zhongjh.albumcamerarecorder.widget.clickorlongbutton.ClickOrLongButton.BUTTON_STATE_ONLY_LONG_CLICK;

/**
* @author zhongjh
* @date 2018/7/23.
Expand Down Expand Up @@ -1358,18 +1358,19 @@ public void onClick() {
/**
* 多图进行删除的时候
*
* @param position 数据的索引
* @param bitmapData 数据
*/
@Override
public void onDelete(int position) {
public void onDelete(BitmapData bitmapData) {
// 删除文件
FileUtil.deleteFile(mBitmapData.get(position).getPath());
FileUtil.deleteFile(bitmapData.getPath());

// 回调接口:删除图片后剩下的相关数据
mCaptureListener.remove(mBitmapData);

// 当列表全部删掉的话,就隐藏,为什么是 <= 1,因为是先删除实体,再删除数据源,所以这个判断结束后,就会删除数据源实际是0了
if (mBitmapData.size() <= 1) {
// 当列表全部删掉隐藏列表框的UI
Log.d(TAG,"onDelete " + mBitmapData.size());
if (mBitmapData.size() <= 0) {
// 隐藏横版列表
mViewHolder.rlPhoto.setVisibility(View.GONE);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.zhongjh.albumcamerarecorder.camera.adapter;

import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.COLLECTION_IMAGE;
import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_COLLECTION_TYPE;
import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_SELECTION;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
Expand Down Expand Up @@ -27,10 +31,6 @@
import java.util.ArrayList;
import java.util.List;

import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.COLLECTION_IMAGE;
import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_COLLECTION_TYPE;
import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_SELECTION;

/**
* 横向形式显示多个图片的
*
Expand Down Expand Up @@ -74,18 +74,19 @@ public PhotoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewTyp

@Override
public void onBindViewHolder(@NonNull PhotoViewHolder holder, int position) {
mGlobalSpec.getImageEngine().loadUriImage(mContext, holder.imgPhoto, mListData.get(position).getUri());
BitmapData bitmapData = mListData.get(position);
mGlobalSpec.getImageEngine().loadUriImage(mContext, holder.imgPhoto, bitmapData.getUri());
// 点击图片
holder.itemView.setOnClickListener(new OnMoreClickListener() {
@Override
public void onMoreClickListener(@NotNull View v) {
onClickListener(position);
onClickListener(bitmapData);
}
});
holder.imgCancel.setOnClickListener(new OnMoreClickListener() {
@Override
public void onMoreClickListener(@NotNull View v) {
removePosition(position);
removePosition(bitmapData);
}
});
}
Expand All @@ -102,62 +103,60 @@ public void setListData(List<BitmapData> listData) {
/**
* 点击事件
*
* @param position 索引
* @param bitmapData 数据
*/
private void onClickListener(int position) {
if (isOperation()) {
ArrayList<MultiMedia> items = new ArrayList<>();
for (BitmapData item : mListData) {
MultiMedia multiMedia = new MultiMedia();
multiMedia.setId(mListData.indexOf(item));
multiMedia.setUri(item.getUri());
multiMedia.setPath(item.getPath());
multiMedia.setMimeType(MimeType.JPEG.toString());
multiMedia.setWidth(item.getWidth());
multiMedia.setHeight(item.getHeight());
items.add(multiMedia);
}
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(STATE_SELECTION, items);
bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE);

Intent intent = new Intent(mContext, AlbumPreviewActivity.class);

// 获取目前点击的这个item
MultiMedia item = new MultiMedia();
item.setUri(mListData.get(position).getUri());
item.setPath(mListData.get(position).getPath());
item.setMimeType(MimeType.JPEG.toString());
item.setWidth(mListData.get(position).getWidth());
item.setHeight(mListData.get(position).getHeight());
intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, item);

intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle);
intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false);
intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true);
intent.putExtra(BasePreviewActivity.IS_SELECTED_LISTENER, false);
intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false);
mCameraFragment.mAlbumPreviewActivityResult.launch(intent);
if (mGlobalSpec.getCutscenesEnabled()) {
if (mCameraFragment.getActivity() != null) {
mCameraFragment.getActivity().overridePendingTransition(R.anim.activity_open_zjh, 0);
}
private void onClickListener(BitmapData bitmapData) {
ArrayList<MultiMedia> items = new ArrayList<>();
for (BitmapData item : mListData) {
MultiMedia multiMedia = new MultiMedia();
multiMedia.setId(mListData.indexOf(item));
multiMedia.setUri(item.getUri());
multiMedia.setPath(item.getPath());
multiMedia.setMimeType(MimeType.JPEG.toString());
multiMedia.setWidth(item.getWidth());
multiMedia.setHeight(item.getHeight());
items.add(multiMedia);
}
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(STATE_SELECTION, items);
bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE);

Intent intent = new Intent(mContext, AlbumPreviewActivity.class);

// 获取目前点击的这个item
MultiMedia item = new MultiMedia();
item.setUri(bitmapData.getUri());
item.setPath(bitmapData.getPath());
item.setMimeType(MimeType.JPEG.toString());
item.setWidth(bitmapData.getWidth());
item.setHeight(bitmapData.getHeight());
intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, item);

intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle);
intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false);
intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true);
intent.putExtra(BasePreviewActivity.IS_SELECTED_LISTENER, false);
intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false);
mCameraFragment.mAlbumPreviewActivityResult.launch(intent);
if (mGlobalSpec.getCutscenesEnabled()) {
if (mCameraFragment.getActivity() != null) {
mCameraFragment.getActivity().overridePendingTransition(R.anim.activity_open_zjh, 0);
}
}
}

/**
* 根据索引删除view
*
* @param position 索引
* @param bitmapData 数据
*/
public void removePosition(int position) {
if (isOperation()) {
mPhotoAdapterListener.onDelete(position);
mListData.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());
}
public void removePosition(BitmapData bitmapData) {
int position = mListData.indexOf(bitmapData);
Log.d(TAG,"removePosition " + position);
mListData.remove(bitmapData);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mListData.size());
mPhotoAdapterListener.onDelete(bitmapData);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public interface PhotoAdapterListener {
/**
* 删除该图片
*
* @param position 数据的索引
* @param bitmapData 数据
*/
void onDelete(int position);
void onDelete(BitmapData bitmapData);

}
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ class PhotoAdapter(private val mContext: Context, private val mGridLayoutManage:
list.remove(multiMediaView)
multiMediaView.maskProgressView.reset()
notifyItemRemoved(position)
notifyItemRangeChanged(position, 1)
notifyItemRangeChanged(position, list.size)
}

/**
Expand All @@ -389,7 +389,7 @@ class PhotoAdapter(private val mContext: Context, private val mGridLayoutManage:
if (list.size + maskProgressLayout.audioList.size >= maxMediaCount
&& isOperation) {
notifyItemRemoved(list.size)
notifyItemRangeChanged(list.size, 1)
notifyItemRangeChanged(list.size, list.size)
}
}

Expand Down

0 comments on commit 70152b4

Please sign in to comment.