我有一个ImageView和一个从我的服务器拉出的位图,但我无法以我想要的方式将位图设置为ImageView。
例如,以下是我正在使用的组件:
我希望我的位图在ImageView上垂直居中设置。
另一个例子是,如果我有一个尺寸相同的ImageView并且Bitmap是100px宽和100px高,我希望位图在缩放后获取ImageView(300px)的宽度并垂直居中。
如何在不实现任何位图大小逻辑的情况下实现这一目标?
答案 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);
}
}