Реализовать этот код изображения камеры в моем представлении переработчика - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть код, в котором у меня есть изображение, и когда я щелкаю его, я делаю снимок, сохраняю его и показываю в виде моего изображения, вот код:

public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_CODE = 1000;
    private static final int IMAGE_CAPTURE_CODE = 1001;
    ImageView foto;
    Uri foto_uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        foto = findViewById(R.id.iv_main_foto);

        foto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checarPermisos();
            }
        });
    }

    private void checarPermisos() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if(checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
                    checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
                String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
                requestPermissions(permission, PERMISSION_CODE);
            } else {
                openCamera();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_CODE: {
                if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED) {
                    openCamera();
                } else {
                    Toast.makeText(this,"Permisos denegados", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    private void openCamera() {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE,"Nueva foto");
        values.put(MediaStore.Images.Media.DESCRIPTION,"Desde la camara");
        foto_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, foto_uri);
        startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            foto.setImageURI(foto_uri);
        }
    }
}

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

Вот мой адаптер, чтобы вы могли посмотреть:

public class OpcionesFotoAdapter extends RecyclerView.Adapter<OpcionesFotoAdapter.OpcionesFotoViewHolder>{

    private Context mCtx;
    private List<OpcionesFotoClass> opcionesfotoList;

    public OpcionesFotoAdapter(Context mCtx, List<OpcionesFotoClass> opcionesfotoList) {
        this.mCtx = mCtx;
        this.opcionesfotoList = opcionesfotoList;
    }

    @NonNull
    @Override
    public OpcionesFotoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemopcionfotos, null);
        return new OpcionesFotoViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final OpcionesFotoViewHolder holder, int position) {
        holder.tituloOpcion.setText(opcionesfotoList.get(position).getTituloOpcion());

        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onItemClick(View view, int pos) {
                Toast.makeText(mCtx,"You're clicking the imageview!",Toast.LENGTH_SHORT).show();
            }
        });
    }

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


    public class OpcionesFotoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView tituloOpcion;
        ImageView foto;

        ItemClickListener itemClickListener;

        public OpcionesFotoViewHolder(@NonNull View itemView) {
            super(itemView);
            tituloOpcion = itemView.findViewById(R.id.tv_nombreOpcionFoto);
            foto = itemView.findViewById(R.id.iv_fotoOpcion);

            foto.setOnClickListener(this);
        }

        public void setItemClickListener(ItemClickListener ic) {
            this.itemClickListener = ic;
        }

        @Override
        public void onClick(View v) {
            this.itemClickListener.onItemClick(v, getLayoutPosition());
        }
    }
    interface ItemClickListener {
        void onItemClick(View view, int pos);
    }
}

Моя проблема состоит в том, чтобы принести первый код ко второму, я попробовал, и я не знаю, как получить доступ к изображениям в позициях и определить разрешения, куда я должен их поместить, сейчас я храню их в отдельных приложениях. Спасибо!

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