2013-11-17 2 views
0

У меня есть ImageView и растровое изображение, которое я извлекаю с моего сервера, но мне трудно настроить растровое изображение на ImageView так, как хотелось бы.Установить растровое изображение в ImageView с определенной высотой

Например вот компоненты, я работаю с:

  • ImageView является 300px шириной и 100px высокого
  • Bitmap является 300px шириной и 300px высокого

Я хотел бы, чтобы моя растровое для установки в ImageView по вертикали.

Другим примером является то, что если бы у меня был ImageView с теми же размерами, и растровое изображение шириной 100 пикселей и высотой 100 пикселей, я бы хотел, чтобы растровое изображение занимало ширину ImageView (300 пикселей) и вертикально центрировалось после масштабирования.

Как я могу достичь этого без реализации какой-либо логики размера битмапа?

ответ

1

попробовать этот

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
     int width = bm.getWidth(); 
     int height = bm.getHeight(); 
     float scaleWidth = ((float) newWidth)/width; 
     float scaleHeight = ((float) newHeight)/height; 
     // CREATE A MATRIX FOR THE MANIPULATION 
     Matrix matrix = new Matrix(); 
     // RESIZE THE BIT MAP 
     matrix.postScale(scaleWidth, scaleHeight); 

     // "RECREATE" THE NEW BITMAP 
     Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); 
     return resizedBitmap; 
    } 
0

Вы должны смотреть на это: Loading Bitmap, вы можете уменьшить размер растрового эффективно использовать метод, предусмотренный в этой ссылке. А также, если у вас было изображение с более высоким размером, то ваше растровое изображение использует свойство scaletype для ImageView.

Некоторые намек использовать scaletype свойство:

  if (myBitmap.getWidth() > myBitmap 
      .getHeight() 
       && myBitmap.getWidth() > 300 
       && myBitmap.getHeight() > 200) { 

      ((ImageView) view) 
        .setScaleType(ScaleType.FIT_XY); 

     } else { 
      ((ImageView) view) 
       .setScaleType(ScaleType.FIT_CENTER); 
     } 
0

/** * @author небо */ общественного класса BitmapImageView расширяет ImageView {

public BitmapImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public BitmapImageView(Context context) { 
    super(context); 
} 

private BitmapDrawable imageDrawable; 

@Override 
public final void setImageDrawable(Drawable drawable) { 
    super.setImageDrawable(drawable); 
    if (drawable instanceof BitmapDrawable) { 
     imageDrawable = (BitmapDrawable) drawable; 
    } else { 
     imageDrawable = null; 
    } 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    // 
    if (imageDrawable == null) { 
     super.onDraw(canvas); 
     return; 
    } 
    Bitmap imgBitmap = imageDrawable.getBitmap(); 
    if (imgBitmap == null || imgBitmap.isRecycled()) { 
     super.onDraw(canvas); 
     return; 
    } 
    int dw = imgBitmap.getWidth(); 
    int dh = imgBitmap.getHeight(); 
    if (dw <= 0 || dh <= 0) { 
     super.onDraw(canvas); 
     return; 
    } 
    float scale = getWidth()/(float) dw; 
    // 
    float topOffsetAfterScale = -(dh * scale - getHeight())/2f; 
    int save_count = canvas.save(); 
    canvas.translate(0, topOffsetAfterScale); 
    canvas.scale(scale, scale); 
    canvas.drawBitmap(imgBitmap, 0, 0, imageDrawable.getPaint()); 
    canvas.restoreToCount(save_count); 
} 

}

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