将位图设置为具有特定高度的ImageView

时间:2013-11-17 03:00:19

标签: java android xml

我有一个ImageView和一个从我的服务器拉出的位图,但我无法以我想要的方式将位图设置为ImageView。

例如,以下是我正在使用的组件:

  • ImageView宽300像素,高100像素
  • 位图宽300像素,高300像素

我希望我的位图在ImageView上垂直居中设置。

另一个例子是,如果我有一个尺寸相同的ImageView并且Bitmap是100px宽和100px高,我希望位图在缩放后获取ImageView(300px)的宽度并垂直居中。

如何在不实现任何位图大小逻辑的情况下实现这一目标?

3 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

您应该看一下:Loading Bitmap,您可以使用该链接中提供的方法有效地缩小位图的大小。 而且如果你有一个更高维度的imageview,那么你的位图使用ImageView的scaletype属性。

使用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);
        }

答案 2 :(得分:0)

/ **  * @author sky  * / 公共类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);
}

}