У меня есть изображение на линейной линии.Как масштабировать изображение/растровое изображение и пиксели против провалов
Я хотел бы, чтобы изображение отображало растровое изображение, которое оно удерживает, поэтому оно занимает максимальное пространство в линейной компоновке, но при этом сохраняет правильную масштаб изображения.
public static void sharedUtilScaleImage(ImageView view)
{
Drawable drawing = view.getDrawable();
//--
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int widthParent = view.getWidth();
int heightParent = view.getHeight();
//--
float density = 1;
if (true) {
density = MicApp.getContext().getResources().getDisplayMetrics().density;
}
//--
float xScale = ((float) widthParent * density)/bitmapWidth;
float yScale = ((float) heightParent * density)/bitmapHeight;
float minScale = Math.min(xScale, yScale);
//--
Matrix matrix = new Matrix();
matrix.postScale(minScale, minScale);
//--
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true);
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
view.setImageDrawable(result);
}
Для справки, я нашел некоторые из выше кода здесь: htttp: //stackoverflow.com/questions/8114085/how-to-create-white-border-around-bitmap
Однако, Я нахожу это немного озадачивающим.
- хранить все свои растровые изображения в растяжимой-ИПЧР
- Растровое .getHeight/.getWidth возвращает фактические пиксели (а не плотность пикселей) измененные
- Однако вид .getHeight/.getWidth возвращает пиксели, меньше, чем их фактическое использование пикселей на телефоне. Мне нужно умножить их на плотность, чтобы получить фактические пиксели.
Почему разница в значениях возвращена?
Мне нравится, что мои растровые изображения возвращают фактический размер пикселей. Но я читал в другом месте, что требовало бы, чтобы их помещали в «res/drawable-nodpi», так что это похоже на дополнительную несогласованность?
Для справки код, который помещает растровое изображение в ImageView и ImageView внутри линейной компоновки выглядит следующим образом:
imageView.setImageResource(picIDs[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(lp);
//--
linearLayoutInner.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
linearLayoutInner.addView(imageView);
Есть ли причина, по которой вы не просто используете 'CENTER_INSIDE' на' ImageView'? http://developer.android.com/reference/android/widget/ImageView.ScaleType.html – CommonsWare
Это не масштабировало изображение внутри, а только центрировало его. Я также добавил этот код, так что вы можете его увидеть :) – Tom
Но даже если CENER_INSIDE решит мою проблему (что в моих тестах это не так), мне все еще интересно узнать о моих вопросах, так как я хочу понять Android столько же, сколько возможно :) – Tom