Как преобразовать элементы переработчика в растровое изображение и поделиться им в виде нескольких изображений? - PullRequest
0 голосов
/ 22 января 2019

Привет, я использую Recyclelerview, у меня есть флажок в моем Rickler View, пользователь может установить флажок в Rickler View.Теперь предположим, что пользователь проверит два элемента из перечня реселлеров и нажмет кнопку «Поделиться», теперь в одном диалоговом окне с предупреждением я загружаю данные рециркулятора с другим макетом в другом горизонтальном окне.Теперь во втором макете у меня будет два элемента, которые я прокручиваю по горизонтали.Теперь из диалогового окна, если я делюсь информацией с WhatsApp или другими приложениями, он использует только один макет в качестве изображения горизонтального изображения реселлера вместо двух изображений.

customAdapter = new CustomAdapter(this,modelArrayList);
        recyclerView.setAdapter(customAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));


        btndeselect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Batch_Share_Layout();

            }
        });


    }



    public static class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

        private LayoutInflater inflater;
        public static ArrayList<Model> imageModelArrayList;
        private Context ctx;


        public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) {

            inflater = LayoutInflater.from(ctx);
            this.imageModelArrayList = imageModelArrayList;
            this.ctx = ctx;
        }

        @Override
        public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = inflater.inflate(R.layout.rv_item, parent, false);
            MyViewHolder holder = new MyViewHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {

            // holder.checkBox.setText("Checkbox " + position);
            holder.checkBox.setChecked(imageModelArrayList.get(position).getSelected());
            holder.tvAnimal.setText(imageModelArrayList.get(position).getAnimal());
            alertviewlist =new ArrayList<Model>();
            // holder.checkBox.setTag(R.integer.btnplusview, convertView);
            holder.checkBox.setTag(position);
            holder.checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Integer pos = (Integer) holder.checkBox.getTag();
                    Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked! ", Toast.LENGTH_SHORT).show();
                    alertviewlist.add(imageModelArrayList.get(pos));
                    System.out.println(alertviewlist.size());
                    if (imageModelArrayList.get(pos).getSelected()) {
                        imageModelArrayList.get(pos).setSelected(false);
                    } else {
                        imageModelArrayList.get(pos).setSelected(true);
                    }
                }
            });


        }

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

        class MyViewHolder extends RecyclerView.ViewHolder {

            protected CheckBox checkBox;
            private TextView tvAnimal;

            public MyViewHolder(View itemView) {
                super(itemView);

                checkBox = (CheckBox) itemView.findViewById(R.id.cb);
                tvAnimal = (TextView) itemView.findViewById(R.id.animal);
            }

        }
    }


    public static class CustomAdapterShare extends RecyclerView.Adapter<CustomAdapterShare.MyViewHolder> {

        private LayoutInflater inflater;
        public static ArrayList<Model> imageModelArrayListshare;
        private Context ctx;

        public CustomAdapterShare(Context ctx, ArrayList<Model> imageModelArrayListshare) {

            inflater = LayoutInflater.from(ctx);
            this.imageModelArrayListshare = imageModelArrayListshare;
            this.ctx = ctx;
        }

        @Override
        public CustomAdapterShare.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = inflater.inflate(R.layout.share_layout_data, parent, false);
            MyViewHolder holder = new MyViewHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(final CustomAdapterShare.MyViewHolder holder, int position) {

            holder.product_name.setText(imageModelArrayListshare.get(position).getAnimal());

            //  holder.product_name.setText(imageModelArrayList.get(position).getAnimal());
           /* for (int i = 0; i < CustomAdapterShare.imageModelArrayList.size(); i++){
                if(CustomAdapterShare.imageModelArrayList.get(i).getSelected()) {
                    holder.product_name.setText(CustomAdapterShare.imageModelArrayList.get(i).getAnimal());
                }
            }*/
            // holder.checkBox.setTag(R.integer.btnplusview, convertView);
        }

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

        class MyViewHolder extends RecyclerView.ViewHolder {


            private TextView product_name;

            public MyViewHolder(View itemView) {
                super(itemView);


                product_name = (TextView) itemView.findViewById(R.id.product_name);
            }

        }
    }
    public void Batch_Share_Layout()
    {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
        LayoutInflater inflater = getLayoutInflater();
        View convertView = inflater.inflate(R.layout.main_layout_recyclers, null);



        list = (RecyclerView) convertView.findViewById(R.id.list);

        list.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
        list.setHasFixedSize(true);

        CustomAdapterShare adapter = new CustomAdapterShare(MainActivity.this,alertviewlist);
        list.setAdapter(adapter);
        alertDialog.setView(convertView);
        share_main_btn = (Button) convertView.findViewById(R.id.main_share_btn);
        share_main_linear = (LinearLayout) convertView.findViewById(R.id.main_linear_layout);
        share_main_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OnClickShare(view);
            }
        });
        AlertDialog dialog = alertDialog.create();
        dialog.getWindow().setLayout(600, 400);
        dialog.show();
        adapter.notifyDataSetChanged();
    }

    public void OnClickShare(View view){

        Bitmap bitmap =getBitmapFromView(share_main_linear);
        try {


            /*Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.putExtra(Intent.EXTRA_TEXT, "Text caption message!!");
            intent.setType("text/plain");
            intent.setType("image/jpeg");
            intent.setPackage("com.whatsapp");
            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
            startActivity(intent);*/
            File file = new File(MainActivity.this.getExternalCacheDir(),"logicchip.png");
            FileOutputStream fOut = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            fOut.flush();
            fOut.close();
            file.setReadable(true, false);
            final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
            intent.setType("image/png");
            MainActivity.this.startActivity(Intent.createChooser(intent, "Share image via"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Это то, что я пытаюсь создать массив uri

uris = new ArrayList<>();


             for(int i=0;i<alertviewlist.size();i++)
             {
                 uris.add(alertviewlist.get(i));

             }

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать кэш чертежа вида, чтобы создать вид, содержащий все виды, которыми вы хотите поделиться, и преобразовать его в растровое изображение.

Во-первых, вам нужно включить кэш чертежа на виде (который вы хотите преобразовать в растровое изображение)

view.setDrawingCacheEnabled(true).

Затем вы можете создать растровое изображение из кэша чертежа, используя -

public static Bitmap getViewBitmap(View view) { Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(returnedBitmap); Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) { bgDrawable.draw(canvas); } else { canvas.drawColor(Color.TRANSPARENT); } view.draw(canvas); return returnedBitmap; }

Теперь у вас есть растровое изображение. Вы можете записать его в файл в файловой системе, а затем поделиться им на других платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...