visor studio servidor obtener mostrar manipular imágenes imagenes imagen desde cargar añadir almacenada android gridview grid-layout image-capture

studio - obtener imagen almacenada en mysql desde android



vista de imagen creada dinámicamente en gridlayout no funciona (4)

En primer lugar, parece que no está utilizando el patrón del titular en su CustomAdapter_back también cuando Fllo notó que no necesita eliminar manualmente las vistas. agregue esta función a su adaptador

public void setData(ArrayList<Damage_Item> data) { this.Damage_Item = Damage_Item; notifyDataSetChanged(); }

y llame a esta función desde el diálogo

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Whould you like to delete this image?"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //get deleted item index according to your logic int index = ((View) v.getParent()).getId() + 2; gridArray.remove(index); customGridAdapter.setData(gridArray); Toast.makeText(getApplicationContext(), "delete", Toast.LENGTH_LONG).show(); } });

Quiero establecer la imagen capturada en la vista de imagen creada dinámicamente en la misma distribución de cuadrícula, pero crea una nueva disposición de cuadrícula y establece la imagen capturada en la nueva vista de cuadrícula.

Este es mi archivo mainactivity.java

public class MainActivity extends Activity implements AdapterView.OnItemClickListener { GridView gridView; ArrayList<Damage_Item> gridArray = new ArrayList<Damage_Item>(); CustomAdapter_back customGridAdapter; GridLayout mContainerView; int REQUEST_CAMERA = 0, SELECT_FILE = 1; ImageView dynamic_imageview; LinearLayout dynamic_linearview; String image1; ArrayList<String> arrayList_image = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContainerView = (GridLayout)findViewById(R.id.describedamage_gridview) ; //gridArray.add(new Item(homeIcon,"Home")); gridView = (GridView) findViewById(R.id.gridview1); Button add = (Button)findViewById(R.id.button1); add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { inflateImageRow(); } }); } public void selectImage() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CAMERA); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_CAMERA) onCaptureImageResult(data); } } public void onCaptureImageResult(Intent data) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); Bitmap resized = Bitmap.createScaledBitmap(thumbnail, 140, 150, true); Bitmap dest = Bitmap.createBitmap(resized.getWidth(), resized.getHeight(), Bitmap.Config.ARGB_8888); ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream(); dest.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream1); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system Canvas canvas = new Canvas(dest); //bmp is the bitmap to dwaw into Paint paint = new Paint(); canvas.drawBitmap(resized, 0f, 0f, null); paint.setColor(Color.BLACK); canvas.drawRect(1, 145, 100, 130, paint); paint.setColor(getResources().getColor(R.color.orange)); paint.setTextSize(10); paint.setFakeBoldText(true); paint.setTextAlign(Paint.Align.LEFT); float height = paint.measureText("yY"); canvas.drawText(dateTime, 5f, height+130f, paint); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); dest.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream.toByteArray(); String image1 = Base64.encodeToString(byteArray, Base64.DEFAULT); //arrayList_image.add(image1); BitmapDrawable background = new BitmapDrawable(dest); //holder.imageItem.setBackground(background); Damage_Item damage_item = new Damage_Item(); damage_item.setTemp_image(dest); gridArray.add(damage_item); customGridAdapter = new CustomAdapter_back(MainActivity.this, gridArray); gridView.setAdapter(customGridAdapter); /*gridView.setAdapter(customGridAdapter); gridView.setOnItemClickListener(MainActivity.this)*/; } int count; private void inflateImageRow() { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View rowView = inflater.inflate(R.layout.dynamic_row, null); dynamic_imageview = (ImageButton)rowView.findViewById(R.id.dynamic_imageview); dynamic_linearview=(LinearLayout)rowView.findViewById(R.id.dynamic_linear); dynamic_imageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //image_flagdynamic_right = true; selectImage(); } }); count= mContainerView.getChildCount()-1; dynamic_imageview.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(final View v) { int parent=((View) v.getParent()).getId(); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Whould you like to delete this image?"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { int index = ((View) v.getParent()).getId() + 2; try { mContainerView.removeView((View) v.getParent()); // arrayList_image.remove(((View) v.getParent()).getId()); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); } Toast.makeText(getApplicationContext(), "delete", Toast.LENGTH_LONG).show(); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return false; } }); mContainerView.addView(rowView, mContainerView.getChildCount() - 1); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { } }

este es mi archivo de adaptador CustomAdapter_back.java

public class CustomAdapter_back extends BaseAdapter { private Context context; private ArrayList<Damage_Item> Damage_Item; LayoutInflater inflater; ImageView button; public CustomAdapter_back(Context context, ArrayList<Damage_Item> Damage_Item) { this.context = context; this.Damage_Item = Damage_Item; inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return Damage_Item.size(); } @Override public Object getItem(int position) { return Damage_Item.get(position); } @Override public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.row_grid, null); button = (ImageView) convertView.findViewById(R.id.imageview); } else { } button.setImageBitmap(Damage_Item.get(position).getTemp_image()); return convertView; } }

Mi archivo activity_manin.xml

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="26dp" android:padding="11dp" android:text="Add" /> <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/describedamage_gridview" android:columnCount="2" android:layout_below="@+id/button1" android:rowCount="1" android:orientation="horizontal"> <GridView android:id="@+id/gridview1" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="2" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" /> </GridLayout>

row_grid.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp" > <ImageView android:id="@+id/imageview" android:layout_width="170dp" android:layout_height="150dp" android:background="@drawable/camera" /> </LinearLayout>


Intente cambiar su xml quitando el GridView ya que la distribución de la parrilla debería cambiar el tamaño de la imagen automáticamente. Otra solución no recomendada sería utilizar las dimensiones de la pantalla para dimensionar su imagen


Prueba esto

public class MainActivity extends Activity implements AdapterView.OnItemClickListener { GridView gridView; ArrayList<Damage_Item> gridArray = new ArrayList<Damage_Item>(); CustomAdapter_back customGridAdapter; GridLayout mContainerView; int REQUEST_CAMERA = 0, SELECT_FILE = 1; ImageView dynamic_imageview; LinearLayout dynamic_linearview; String image1; ArrayList<String> arrayList_image = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContainerView = (GridLayout)findViewById(R.id.describedamage_gridview) ; //gridArray.add(new Item(homeIcon,"Home")); gridView = (GridView) findViewById(R.id.gridview1); Button add = (Button)findViewById(R.id.button1); add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { inflateImageRow(); } }); customGridAdapter = new CustomAdapter_back(MainActivity.this, gridArray); gridView.setAdapter(customGridAdapter); } public void selectImage() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CAMERA); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_CAMERA) onCaptureImageResult(data); } } public void onCaptureImageResult(Intent data) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); Bitmap resized = Bitmap.createScaledBitmap(thumbnail, 140, 150, true); Bitmap dest = Bitmap.createBitmap(resized.getWidth(), resized.getHeight(), Bitmap.Config.ARGB_8888); ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream(); dest.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream1); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system Canvas canvas = new Canvas(dest); //bmp is the bitmap to dwaw into Paint paint = new Paint(); canvas.drawBitmap(resized, 0f, 0f, null); paint.setColor(Color.BLACK); canvas.drawRect(1, 145, 100, 130, paint); paint.setColor(getResources().getColor(R.color.orange)); paint.setTextSize(10); paint.setFakeBoldText(true); paint.setTextAlign(Paint.Align.LEFT); float height = paint.measureText("yY"); canvas.drawText(dateTime, 5f, height+130f, paint); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); dest.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream.toByteArray(); String image1 = Base64.encodeToString(byteArray, Base64.DEFAULT); //arrayList_image.add(image1); BitmapDrawable background = new BitmapDrawable(dest); //holder.imageItem.setBackground(background); Damage_Item damage_item = new Damage_Item(); damage_item.setTemp_image(dest); gridArray.add(damage_item); customGridAdapter.notifyDataSetChanged(); /*gridView.setAdapter(customGridAdapter); gridView.setOnItemClickListener(MainActivity.this)*/; } int count; private void inflateImageRow() { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View rowView = inflater.inflate(R.layout.dynamic_row, null); dynamic_imageview = (ImageButton)rowView.findViewById(R.id.dynamic_imageview); dynamic_linearview=(LinearLayout)rowView.findViewById(R.id.dynamic_linear); dynamic_imageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //image_flagdynamic_right = true; selectImage(); } }); count= mContainerView.getChildCount()-1; dynamic_imageview.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(final View v) { int parent=((View) v.getParent()).getId(); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Whould you like to delete this image?"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { int index = ((View) v.getParent()).getId() + 2; try { mContainerView.removeView((View) v.getParent()); // arrayList_image.remove(((View) v.getParent()).getId()); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); } Toast.makeText(getApplicationContext(), "delete", Toast.LENGTH_LONG).show(); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return false; } }); mContainerView.addView(rowView, mContainerView.getChildCount() - 1); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { } }


en ActivityResult tienes 2 líneas de código:

customGridAdapter = new CustomAdapter_back(MainActivity.this, gridArray); gridView.setAdapter(customGridAdapter);

de modo que cada vez que agrega una nueva imagen recrea el adaptador.

Simplemente mueva la declaración del adaptador a onCreate con la lista vacía. Agregar método

public void addItem(Damage_Item item){ this.Damage_Item.add(item); this.notifyDataSetChange(); }

a su adaptador y desencadenarlo en lugar de crear el adaptador y establecer nuevo dentro de su onCaptureImageResult.

Y por el amor de Dios, nombrando la convención. Tu código es ilegible