2015-01-14 6 views
0

В моем приложении у меня есть Activity, чтобы показать профиль пользователя. Пользователь может настроить изображение своего профиля, выбрав его на снимках камер или изображений в Facebook, и т. Д. Однако эти фотографии могут быть очень большими, поэтому мне нужно как-то автоматически масштабировать компьютеры, если они слишком большие.Автоматическое изменение размера изображений в зависимости от размера дисплея

EDIT

В связи с ответом на мой вопрос я пытался что-то. Я создал несколько вспомогательных методов:

public static int getDisplayWidth(Activity activity) { 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 

    activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 

    return displaymetrics.widthPixels; 
} 

public static int getDisplayHeight(Activity activity) { 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 

    activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 

    return displaymetrics.widthPixels; 
} 

public static int getDrawableWith(Context context, int id) { 
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id); 

    return bitmap.getWidth(); 
} 

public static int getDrawableHeight(Context context, int id) { 
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id); 

    return bitmap.getHeight(); 
} 

public static int getHeightOfImage(int originalWidth, int originalHeight, int targetWidth) { 
    double ratio = ((double)originalWidth/(double)originalHeight); 

    return (int)(targetWidth/ratio); 
} 

И я теперь пытался создать с измененным размером вытяжки и установить его на мой ImageView:

RelativeLayout.LayoutParams layoutParamsView = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 

this.setLayoutParams(layoutParamsView); 

int originalWidth = Helper.getDrawableWith(this.getContext(), R.drawable.background_wave); 
int originalHeight = Helper.getDrawableHeight(this.getContext(), R.drawable.background_wave); 

int targetWidth = Helper.getDisplayWidth((Activity)this.getContext()); 
int targetHeight = Helper.getHeightOfImage(originalWidth, originalHeight, targetWidth); 

RelativeLayout.LayoutParams layoutParamsImageview = new RelativeLayout.LayoutParams(targetWidth, targetHeight); 
layoutParamsImageview.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
layoutParamsImageview.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

Drawable drawable = Helper.getScaledDrawable(this.getContext(), R.drawable.background_wave, targetWidth, targetHeight); 

this.imageViewBackgroundWave = new ImageView(this.getContext()); 
this.imageViewBackgroundWave.setLayoutParams(layoutParamsImageview); 
this.imageViewBackgroundWave.setImageDrawable(drawable); 

this.addView(this.imageViewBackgroundWave); 

Это просто отлично работает, чтобы изменить размер изображения в зависимости от размера дисплея ,

ответ

1

Самый простой способ - преобразовать Bitmap в Drawable для масштабирования.

How to convert a Bitmap to Drawable in android?

Хотя иметь в виде памяти (который был вашим первым «решением») - большие изображения, даже когда «масштабируются» как вытяжка будет потреблять много памяти.

+0

спасибо. Это был правильный ответ, и я обновил сообщение, чтобы показать решение. – Mulgard

Смежные вопросы