当我从活动中更改某些内容时如何获取所有回收视图项目

问题描述 投票:0回答:0

我在 recylclerview 中显示 0 - 10 张图像,用于使用过滤器编辑这些图像并一次更改所有图像的背景。就像一次编辑多张图片一样。这里一切都很好,但是当我在更改后尝试保存这些图像时,我想将每张图像保存为图库中的不同图像。保存代码也可以正常工作,但是当我将回收站视图更改为来自活动的位图时,它只获取正在获取的视图图像。项目计数是正确的。 ex ... 项目数是 10,在我的回收站视图中可以看到 2 个图像,这两个图像正在保存。

这是我的活动代码

class SaveBitmap extends AsyncTask<Void, String, List<String>> {

        SaveBitmap() {

        }

        public void onPreExecute() {
            // customLoader.hide();
            //  customLoader.show();
        }

        public List<String> doInBackground(Void... voids) {
            List<String> filePaths = new ArrayList<>();

            RecyclerView.Adapter adapter = multiFitRecyclerView.getAdapter();
        if (adapter != null){
            int itemCount = adapter.getItemCount();
            for (int position = 0; position<itemCount; position++){
                
            }
        }

            for (int i = 0; i < multifitRecyclerViewAdapter.getItemCount(); i++) {
                MultifitRecyclerViewAdapter.ViewHolder holder = (MultifitRecyclerViewAdapter.ViewHolder) multiFitRecyclerView.findViewHolderForAdapterPosition(i);
                if (holder != null) {
                    Bitmap bitmap1 = Bitmap.createBitmap(holder.pvEditor.getWidth(), holder.pvEditor.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas canvas = new Canvas(bitmap1);
                    holder.pvEditor.draw(canvas);

                    try {
                        String filename = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());
                        File file = SaveFileUtils.saveBitmapFileRemoveBg(MultifitActivity.this, bitmap1, filename, null);
                        if (file != null) {
                            filePaths.add(file.getAbsolutePath());
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            return filePaths;
        }

        public void onPostExecute(List<String> filePaths) {
            // customLoader.hide();
            if (filePaths == null || filePaths.isEmpty()) {
                Toast.makeText(getApplicationContext(), R.string.went_wrong, Toast.LENGTH_LONG).show();
                return;
            }
            Intent i = new Intent(MultifitActivity.this, MultiShareActivity.class);
//            i.putExtra("path", (ArrayList<String>) filePaths);
            i.putStringArrayListExtra("path", (ArrayList<String>) filePaths);
            startActivity(i);
            AdsManager.showAdmobInterstitialAd(MultifitActivity.this, "PhotoEditor");
        }

    }

和这个适配器类的代码

public class MultifitRecyclerViewAdapter extends RecyclerView.Adapter<MultifitRecyclerViewAdapter.ViewHolder> {
    ArrayList<Bitmap> selectedBitmaps;
    Context context;

    String selectedFilterConfig;

    String selectedAdjustConfig;
    private boolean isColor;
    private float mScaleSize;
    private Bitmap bitmapBackground;
    private ArrayList<Bitmap> backgroundImgList;

    public MultifitRecyclerViewAdapter(ArrayList<Bitmap> selectedBitmaps, Context context, Bitmap bitmapBackground, boolean isColor, float mScaleSize) {
        this.selectedBitmaps = selectedBitmaps;
        this.context = context;
        this.isColor = isColor;
        this.bitmapBackground = bitmapBackground;
        this.mScaleSize = mScaleSize;
        this.selectedAdjustConfig = "";
        this.selectedFilterConfig = "";
    }

    public void setSelectedBitmaps(ArrayList<Bitmap> selectedBitmaps) {
        this.selectedBitmaps = selectedBitmaps;
        notifyDataSetChanged();
    }

    public void setBitmapBackground(Bitmap bitmapBackground) {
        this.bitmapBackground = bitmapBackground;
        notifyDataSetChanged();
    }

    public void setmScaleSize(float mScaleSize) {
        this.mScaleSize = mScaleSize;
    }

    public void setColor(boolean color) {
        isColor = color;
    }

    public void setBackgroundImgList(ArrayList<Bitmap> backgroundImgList) {
        this.backgroundImgList = backgroundImgList;
        notifyDataSetChanged();
    }


    @NonNull
    @Override
    public MultifitRecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.multifit_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MultifitRecyclerViewAdapter.ViewHolder holder, int position) {
            holder.ivCover.setImageBitmap(this.selectedBitmaps.get(position));


                if (isColor){

                    holder.ivFrame.setImageBitmap(backgroundImgList.get(position));
                }else {
                    holder.ivFrame.setImageBitmap(bitmapBackground);

                }




            holder.ivCover.setScaleX(mScaleSize);
            holder.ivCover.setScaleY(mScaleSize);
    }

    @Override
    public int getItemCount() {
        return selectedBitmaps.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public PhotoEditorView pvEditor;
        RectangularLayout rectangularLayout;
        public ImageView ivFrame, ivCover;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            pvEditor = itemView.findViewById(R.id.photo_editor_view);
            ivFrame = itemView.findViewById(R.id.ivFrame);
            ivCover = itemView.findViewById(R.id.ivCover);
            rectangularLayout = itemView.findViewById(R.id.relative_layout_wrapper_photo);
        }
    }
}
java android android-recyclerview bitmap
© www.soinside.com 2019 - 2024. All rights reserved.