tamaño studio resolucion redimensionar pantalla imagenes imagen fondo comprimir aplicacion ajustar android android-layout android-imageview android-image

redimensionar - resolucion de imagenes en android studio



Cómo escalar una imagen en Android (4)

Estoy creando una aplicación de Android y puedo agregar una imagen. Sin embargo, lo que quiero hacer es reducir la imagen para ajustarla al tamaño del ImageButton. ¿Hay alguna forma de hacer eso?

El código que he escrito hasta ahora:

package awad865.project.ContactManager1; import java.io.FileNotFoundException; import java.io.InputStream; import android.app.Activity; import android.content.Intent; import android.database.SQLException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Spinner; public class AddContact extends Activity { //declare private fields private EditText firstName; private EditText lastName; private EditText number; private EditText address; private EditText date; private EditText email; private Spinner numberSpinner; private Spinner emailSpinner; private Spinner addressSpinner; private Spinner dateSpinner; private DatabaseHandler databaseHandler; private ImageButton addPic; private final int IMAGE_SELECTION =1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_contact); //code that enables the title on the action bar getActionBar().setDisplayShowTitleEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); databaseHandler = new DatabaseHandler(this); //intialise private fields firstName = (EditText)findViewById(R.id.edit_first_name); lastName = (EditText)findViewById(R.id.edit_last_name); number = (EditText)findViewById(R.id.edit_number); address = (EditText)findViewById(R.id.edit_address); date = (EditText)findViewById(R.id.edit_date); email =(EditText)findViewById(R.id.edit_email); //Spinner for the phone number field numberSpinner = (Spinner) findViewById(R.id.contact_number_spinner); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.number_array, android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner numberSpinner.setAdapter(adapter); //Spinner for the email address field emailSpinner = (Spinner) findViewById(R.id.contact_email_spinner); adapter = ArrayAdapter.createFromResource(this, R.array.email_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); emailSpinner.setAdapter(adapter); //Spinner for address field addressSpinner = (Spinner) findViewById(R.id.contact_address_spinner); adapter= ArrayAdapter.createFromResource(this, R.array.address_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); addressSpinner.setAdapter(adapter); //Spinner for date dateSpinner = (Spinner) findViewById(R.id.contact_date_spinner); adapter=ArrayAdapter.createFromResource(this, R.array.date_array, android.R.layout.simple_spinner_dropdown_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); dateSpinner.setAdapter(adapter); addPic = (ImageButton) findViewById(R.id.addImage); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_social_person); addPic.setImageBitmap(bm); addPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent imageIntent = new Intent(Intent.ACTION_PICK); imageIntent.setType("image/*"); startActivityForResult(imageIntent, IMAGE_SELECTION); } }); } protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){ super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch(requestCode){ case IMAGE_SELECTION: if(resultCode == RESULT_OK){ try{ BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = true; final Uri imageURI = imageReturnedIntent.getData(); final InputStream inStr = getContentResolver().openInputStream(imageURI); final Bitmap selectImg = BitmapFactory.decodeStream(inStr, null, options); addPic.setImageBitmap(selectImg); }catch(FileNotFoundException ex){ Log.e("File not found", "Selected image was not found", ex); } } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.add_contact, menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ //if the save button is pressed, then all the information is retrieved from the EditText fields //and stored in the private fields and then a new contact object is created and added to the //database case R.id.action_save: BitmapDrawable bmd = ((BitmapDrawable) addPic.getDrawable()); Bitmap photo = bmd.getBitmap(); Contact contact = new Contact(firstName.getText().toString(),lastName.getText().toString(),number.getText().toString(), numberSpinner.getSelectedItem().toString(), email.getText().toString(), emailSpinner.getSelectedItem().toString(), date.getText().toString(), dateSpinner.getSelectedItem().toString(), address.getText().toString(), addressSpinner.getSelectedItem().toString(), "false"); //add to database try { databaseHandler.openDataBase(); databaseHandler.addContact(contact); databaseHandler.close(); } catch (SQLException sqle) { throw sqle; } //go back to list of contacts Intent intentMain = new Intent(getApplicationContext(),MainActivity.class); intentMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intentMain); return true; //if the cancel button is pressed on the action bar then the user is navigate to MainActivity case R.id.action_cancel: Intent intentCancel = new Intent(this,MainActivity.class); intentCancel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intentCancel); return true; //if the up button is pressed, then the user is taken back to the MainActivity case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; default: return super.onOptionsItemSelected(item); } } }

Archivo XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".AddContact" > <TextView android:id="@+id/lbl_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:text="@string/heading_name" android:textColor="#0ab2ea" /> <View android:id="@+id/view_name" android:layout_width="wrap_content" android:layout_height="1.5dp" android:background="@drawable/blue_colour" /> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="6" > <EditText android:id="@+id/edit_first_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="5" android:hint="@string/hint_firstname" android:inputType="textCapSentences" /> <ImageButton android:id="@+id/addImage" android:layout_width="0dp" android:layout_height="58dp" android:layout_weight="1" android:background="@drawable/ic_social_person" /> </LinearLayout> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="6" > <EditText android:id="@+id/edit_last_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="5" android:hint="@string/hint_lastname" android:inputType="textCapSentences" /> </LinearLayout> <TextView android:id="@+id/lbl_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="@string/heading_number" android:textColor="#0ab2ea" /> <View android:id="@+id/view_number" android:layout_width="wrap_content" android:layout_height="1.5dp" android:background="@drawable/blue_colour" /> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3" > <EditText android:id="@+id/edit_number" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginTop="10dp" android:layout_weight="2" android:hint="@string/hint_number" android:inputType="number" /> <Spinner android:id="@+id/contact_number_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" /> </LinearLayout> <TextView android:id="@+id/lbl_email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="@string/heading_email" android:textColor="#0ab2ea" /> <View android:id="@+id/view_email" android:layout_width="wrap_content" android:layout_height="1.5dp" android:background="@drawable/blue_colour" /> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3" > <EditText android:id="@+id/edit_email" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginTop="10dp" android:layout_weight="2" android:hint="@string/hint_email" android:inputType="textEmailAddress" /> <Spinner android:id="@+id/contact_email_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" /> </LinearLayout> <TextView android:id="@+id/lbl_address" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="@string/heading_address" android:textColor="#0ab2ea" /> <View android:id="@+id/view_address" android:layout_width="wrap_content" android:layout_height="1.5dp" android:background="@drawable/blue_colour" /> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3" > <EditText android:id="@+id/edit_address" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginTop="10dp" android:layout_weight="2" android:hint="@string/hint_address" android:inputType="textPostalAddress" /> <Spinner android:id="@+id/contact_address_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" /> </LinearLayout> <TextView android:id="@+id/lbl_event" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="@string/heading_event" android:textColor="#0ab2ea" /> <View android:id="@+id/view_event" android:layout_width="wrap_content" android:layout_height="1.5dp" android:background="@drawable/blue_colour" /> <LinearLayout android:layout_width="337dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3" > <EditText android:id="@+id/edit_date" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginTop="10dp" android:layout_weight="2" android:hint="@string/hint_date" android:inputType="date" /> <Spinner android:id="@+id/contact_date_spinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> </LinearLayout>

Cualquier ayuda sería apreciada.


Aquí hay un código que podría ayudarlo:

Reemplace este código

BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = true; final Uri imageURI = imageReturnedIntent.getData(); final InputStream inStr = getContentResolver().openInputStream(imageURI); final Bitmap selectImg = BitmapFactory.decodeStream(inStr, null, options); addPic.setImageBitmap(selectImg);

con el siguiente código

final Uri imageURI = imageReturnedIntent.getData(); final InputStream inStr = new BufferedInputStream(getContentResolver().openInputStream(imageURI)); int height = addPic.getHeight(); int width = addPic.getWidth(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(inStr, null, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, width, height); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; try { inStr.reset(); } catch (IOException e) { e.printStackTrace(); } Bitmap selectImg = BitmapFactory.decodeStream(inStr, null, options); addPic.setImageBitmap(selectImg);

Y agrega esta función a tu clase

public int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { // Calculate ratios of height and width to requested height and width final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); // Choose the smallest ratio as inSampleSize value, this will guarantee // a final image with both dimensions larger than or equal to the // requested height and width. inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; }

Para obtener más información, puede consultar http://developer.android.com/training/displaying-bitmaps/load-bitmap.html


Intente usar esta propiedad en su ImageButton :

<ImageButton android:scaleType="fitXY" ... />

Espero que esto ayude :)


Quizás saque esto de su ImageButton xml

android:layout_weight="1"


Use el atributo Scale de ImageButton como:

<ImageButton android:id="@+id/addImage" android:layout_width="0dp" android:layout_height="58dp" android:layout_weight="1" android:scaleType="fitXY" android:background="@drawable/ic_social_person" />