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