У меня есть GridView
. Данные GridView
запроса от сервера.
Вот расположение элементов в GridView
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/analysis_micon_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/half_activity_vertical_margin"
android:paddingLeft="@dimen/half_activity_horizontal_margin"
android:paddingRight="@dimen/half_activity_horizontal_margin"
android:paddingTop="@dimen/half_activity_vertical_margin" >
<ImageView
android:id="@+id/ranking_prod_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/ranking_rank_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Я запрашиваю данные с сервера, получаю URL-адрес изображения и загружаю изображение в Bitmap
public static Bitmap loadBitmapFromInputStream(InputStream is) {
return BitmapFactory.decodeStream(is);
}
public static Bitmap loadBitmapFromHttpUrl(String url) {
try {
return loadBitmapFromInputStream((InputStream) (new URL(url).getContent()));
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return null;
}
}
и есть код getView(int position, View convertView, ViewGroup parent)
метода в адаптере
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
Размер изображения 210*210
. Я запускаю свое приложение на Nexus 4. Изображение заполняет ImageView
ширину, но ImageView
высота не масштабируется. ImageView
не показывает все изображение
Как мне решить эту проблему?
fill_parent
для ширины - это просто хорошая практика, также работает фиксированный размер.Мне нравится ответ arnefm, но он допустил небольшую ошибку (см. Комментарии), которую я постараюсь исправить:
Таким образом, ваша
ImageView
шкала будет правильно масштабирована и не будет иметь проблем с размерами, если (например) поместить внутрьScrollView
источник
there
это ссылкаУ меня была похожая проблема однажды. Я решил это, сделав собственный ImageView.
Затем переопределите метод onMeasure для изображения. Я сделал что-то вроде этого, я считаю:
Это растянет изображение до размеров экрана, сохраняя соотношение сторон.
источник
android:layout_height="wrap_content"
. В этом случаеMeasureSpec.getSize(heightMeasureSpec)
будет0
и вашviewSideRatio
результатInfinity
(не удивительно, что Java float допускает такие значения). В этом случае и ваш,height
иwidth
будет0
.Использование
android:scaleType="centerCrop"
.источник
Я сделал что-то похожее на вышесказанное, а затем несколько часов ударил головой о стену, потому что это не сработало внутри
RelativeLayout
. Я получил следующий код:И затем, чтобы не
RelativeLayout
игнорировать измеренный размер, я сделал это:источник
Используйте эти свойства в ImageView, чтобы сохранить соотношение сторон:
источник
Это не будет применимо, если вы установите изображение в качестве фона в ImageView, необходимо установить на src (android: src).
Спасибо.
источник
Чтобы создать изображение, ширина которого равна ширине экрана, а высота пропорционально установлена в соответствии с соотношением сторон, выполните следующие действия.
Надеюсь это поможет.
источник
Попробуйте это: это решило проблему для меня
источник
Йо не нужен код Java. Вам просто нужно:
Ключ в родительском совпадении для ширины и высоты
источник
попробуйте эту простую строку ... добавьте эту строку в свой XML-код в теге представления изображений без добавления каких-либо зависимостей android: scaleType = "fitXY"
источник
использовать android: ScaleType = "fitXY" im ImageView xml
источник
Вы можете попытаться сделать то, что делаете, вручную загрузив изображения, но я очень и очень рекомендую взглянуть на Universal Image Loader .
Я недавно включил это в свой проект, и я должен сказать, что это фантастика. Все заботится о том, чтобы сделать вещи асинхронными, изменить их размер, кэшировать изображения для вас. Это действительно легко интегрировать и настроить. В течение 5 минут вы, вероятно, сможете сделать то, что хотите.
Пример кода:
Это может лениво загружать изображения, корректно подгонять их к размеру imageView, отображая изображение заполнителя во время его загрузки и показывая значок по умолчанию, если загрузка не удалась, и кэширование ресурсов.
- Я должен также добавить, что этот текущий конфиг сохраняет соотношение сторон изображения, следовательно, применимо к вашему первоначальному вопросу
источник
Просто используйте UniversalImageLoader и установите
и нет настроек масштаба в ImageView
источник
У меня была похожая проблема, я нашел причину этого потому, что вам нужно рассчитать
dp
. Android студия вычисляяImageView
при загрузке его изdrawable
, но когда вы используете другой способ, как загрузка из растрового изображения вdp
автоматически не учитывается,Вот мой xml
Я использую Kotlin и загружаю Drawable из файла активов, вот как я рассчитываю это
источник
Используйте Пикассо, который прост в использовании ..
В вашем адаптере ..
http://square.github.io/picasso/
источник