У меня есть код, в котором у меня есть изображение, и когда я щелкаю его, я делаю снимок, сохраняю его и показываю в виде моего изображения, вот код:
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);
}
}
Моя проблема состоит в том, чтобы принести первый код ко второму, я попробовал, и я не знаю, как получить доступ к изображениям в позициях и определить разрешения, куда я должен их поместить, сейчас я храню их в отдельных приложениях. Спасибо!