2016-12-27 3 views
2

Я устанавливаю изображение профиля учетной записи, выбрав изображение из галереи следующимandroid: как фиксировать размер изображения с программным обеспечением?

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.profile_image : 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY); 

    } 
    } 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == GALLERY && resultCode != 0) { 
     profileImage.setImageBitmap(null); 
      if (Image != null) 
       Image.recycle(); 
     Uri mImageUri = data.getData(); 
     try { 
      Image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageUri); 
       profileImage.setImageBitmap(Image); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

это отлично работает, но одна проблема есть, высота изображения и ширина получить изменения для различных изображений. я хочу, чтобы размер и ширина изображения составляли 150 дп? Ниже мой XML-код

<ImageView 
    android:id="@+id/profile_image" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    app:srcCompat="@android:drawable/sym_def_app_icon" 
    android:clickable="true"/> 
+0

См. [Это] (http://stackoverflow.com/a/41038654/5460053) для изменения размера изображения. –

ответ

2

вы можете использовать «centerCrop» scaleType для этой цели.

<ImageView 
    android:id="@+id/profile_image" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:scaleType="centerCrop"/> 

Другие типы весов являются:

ЦЕНТР
центр изображения в представлении, но не совершают масштабирования.

CENTER_CROP
Масштаб изображения равномерно (поддерживать соотношение формата изображения), так что обе размеры (ширина и высота) изображения будет равна или больше, чем соответствующий размер вида (минус заполнения).

CENTER_INSIDE
Масштаб изображения равномерно (поддерживать соотношение формата изображения), так что обе размеры (ширина и высота) изображения будет равна или меньше, чем соответствующий размер вида (минус заполнения).

FIT_CENTER
Увеличьте изображение с помощью ЦЕНТРА.

FIT_END
Увеличьте изображение с помощью КОНЕЦ.

FIT_START
Увеличьте изображение с помощью ПУСКА.

FIT_XY
Масштабировать изображение, используя FILL.

MATRIX
Шкала с использованием матрицы изображений при рисовании.

0
<ImageView 
    android:id="@+id/profile_image" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    app:srcCompat="@android:drawable/sym_def_app_icon" 
    android:layout_centerInParent="true" 
    android:adjustViewBounds="true" 
    android:clickable="true"/> 

добавьте выше двух свойств к вашему ImageView

0

Вы должны установить LayoutParams на View вы хотите изменить размер:

private void resizeImageView(ImageView iv, int w, int h) { 
    //set width and height in pixels 
    iv.setLayoutParams(new ViewGroup.LayoutParams(w, h)); 
    //or if w and h are in dp: 
    //iv.setLayoutParams(new ViewGroup.LayoutParams(dpToPx(this, w), dpToPx(this, h))); 
} 

private int dpToPx(Activity activity, int dp) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics); 
}