#android #imageview #tablelayout #scaletype
#Android #imageview #tablelayout #масштабирование
Вопрос:
У меня есть табличное представление с ячейками ImageView
s. То, что я пытаюсь сделать, это создать эффект масштабирования путем увеличения размера ImageView
s в таблице. Это отлично работает для уменьшения масштаба (изображение изменяется вместе с ImageView
), но проблема заключается в увеличении. Изображение не изменяется при увеличении ImageView
размера.
Вот пример:
Я хочу, чтобы изображение было того же размера, что и ImageView (каждый черный квадрат — это ImageView)
Вот мой код для масштабирования (любые советы по лучшей реализации будут оценены, не хочу использовать масштабирование).
zoomIndex ranges from -2, 2. (only allow them to zoom twice in each direction)
zoomInThreshold = 2, zoomOutThreshold = -2.
defaultSize = 50, zoomIncrement = 15;
if(zoomIndex < zoomInThreshold)
defaultSize = zoomIncrement;
for(int i = 0; i < table.getChildCount(); i)
{
TableRow row = (TableRow)table.getChildAt(i);
for(int r = 0; r < row.getChildCount(); r)
{
ImageView img = (ImageView)row.getChildAt(r);
if(zoomIndex < zoomInThreshold)
{
TableRow.LayoutParams imgLayoutParams = new TableRow.LayoutParams(
defaultSize,
defaultSize
);
img.setLayoutParams(imgLayoutParams);
if(img.getDrawable() != null)
{
img.setAdjustViewBounds(true);
img.setMaxHeight(defaultSize);
img.setMaxWidth(defaultSize);
img.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
}
}
}
}
if(zoomIndex < zoomInThreshold)
zoomIndex ;
Комментарии:
1. вы должны предложить вознаграждение за это 🙂
2. Я могу начать вознаграждение только через 2 дня
Ответ №1:
Разобрался с проблемой, эта проблема возникает только при загрузке моих чертежей из файлов xml. Все, что мне нужно было сделать, это добавить эту строку при загрузке чертежа
img.setAdjustViewBounds(true);
Вот как это вписывается:
if(drawableID != -1)
{
Bitmap pic = BitmapFactory.decodeResource(getResources(), drawableID);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(pic, 50, 50, true);
im.setImageBitmap(resizedBitmap);
ic.setImage(im);
im.setTag(ic);
im.setAdjustViewBounds(true);
//rotate the icon
im.setScaleType(ImageView.ScaleType.MATRIX);
Matrix matrix = new Matrix();
matrix.set(im.getImageMatrix());
matrix.postRotate(rotAngle, pic.getWidth() / 2, pic.getHeight() / 2);
im.setImageMatrix(matrix);
im.setOnLongClickListener(longListen);//only set this listener if there is something there
}
У меня были только img.setAdjustViewBounds(true);
кнопки масштабирования.