如何使用 Glide 将 Image 适配到 ImageView
How to fit Image into ImageView using Glide
我关心的是如何将使用 android:scaleType="fitXY"
的图像与使用 Glide 的图像相匹配。
我的 ImageView
是
<ImageView
android:id="@+id/img_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleType="fitXY" />
像这样使用 Glide 加载图像
Glide.with(context).load(url).placeholder(R.drawable.default_image).into(img);
但图像不适合 ImageView
它在图像两侧显示 space 如屏幕所示我需要它 fitXY
您可以使用centerCrop()
或fitCenter()
方法:
Glide.with(context)
.load(url)
.centerCrop()
.placeholder(R.drawable.default_image)
.into(img)
或
Glide.with(context)
.load(url)
.fitCenter()
.placeholder(R.drawable.default_image)
.into(img)
您还可以在以下位置找到更多信息:https://futurestud.io/tutorials/glide-image-resizing-scaling
您可以使用 .centerCrop()
、.centerInside()
或 .fitCenter()
另一种方法是使用自定义 Transformation
在 Glide v4 上你必须创建一个 RequestOptions 对象,像这样:
RequestOptions options = new RequestOptions();
options.centerCrop();
Glide.with(fragment)
.load(url)
.apply(options)
.into(imageView);
<android.support.v7.widget.AppCompatImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
.......................................
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
AppCompatImageView ivPhoto = findViewById(R.id.ivPhoto);
Glide.with(this)
.load("https://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg")
.apply(new RequestOptions()
.placeholder(R.drawable.place_holder_gallery)
.error(R.drawable.ic_no_image)
)
.into(ivPhoto);
如果使用 Glide v4 GlideApp 实例:
GlideApp.with(view.getContext())
.load(url)
.centerCrop()
.into(view);
如果使用数据绑定:
@BindingAdapter("glideCropCenter")
public static void setProgress(ImageView view, string url) {
GlideApp.with(view.getContext())
.load(url)
.centerCrop()
.into(view);
}
在xml中:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:glideCropCenter="@{viewModel.url}" />
你可以调用.override(horizontalSize, verticalSize)。这将在 ImageView 中显示之前调整图像的大小。
Glide.with(context)
.load(url)
.override(horizontalSize, verticalSize)//resizes the image to these dimensions (in pixel).
.into(img);
我的解决方案是忽略 BitmapTransformation for FIT_XY 缩放类型。
也将比例类型设置为相应的类型,如下所示,
val options = RequestOptions()
mDesignOptions?.bgScaleType?.let {
mScaleType = it
}
if (mScaleType == Settings.SCALE_TYPE_CENTER_CROP) {
imgView.scaleType = ImageView.ScaleType.CENTER_CROP
options.transform(CenterCrop())
} else if (mBgScaleType == Settings.SCALE_TYPE_ORIGINAL) {
imgView.scaleType = ImageView.ScaleType.FIT_CENTER
options.transform(FitCenter())
} else {
imgView.scaleType = ImageView.ScaleType.FIT_XY
}
Glide.with(applicationContext)
.load(imgPath) // Uri of the Photo
.apply(options)
.into(imgView)
我关心的是如何将使用 android:scaleType="fitXY"
的图像与使用 Glide 的图像相匹配。
我的 ImageView
是
<ImageView
android:id="@+id/img_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleType="fitXY" />
像这样使用 Glide 加载图像
Glide.with(context).load(url).placeholder(R.drawable.default_image).into(img);
但图像不适合 ImageView
它在图像两侧显示 space 如屏幕所示我需要它 fitXY
您可以使用centerCrop()
或fitCenter()
方法:
Glide.with(context)
.load(url)
.centerCrop()
.placeholder(R.drawable.default_image)
.into(img)
或
Glide.with(context)
.load(url)
.fitCenter()
.placeholder(R.drawable.default_image)
.into(img)
您还可以在以下位置找到更多信息:https://futurestud.io/tutorials/glide-image-resizing-scaling
您可以使用 .centerCrop()
、.centerInside()
或 .fitCenter()
另一种方法是使用自定义 Transformation
在 Glide v4 上你必须创建一个 RequestOptions 对象,像这样:
RequestOptions options = new RequestOptions();
options.centerCrop();
Glide.with(fragment)
.load(url)
.apply(options)
.into(imageView);
<android.support.v7.widget.AppCompatImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
.......................................
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
AppCompatImageView ivPhoto = findViewById(R.id.ivPhoto);
Glide.with(this)
.load("https://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg")
.apply(new RequestOptions()
.placeholder(R.drawable.place_holder_gallery)
.error(R.drawable.ic_no_image)
)
.into(ivPhoto);
如果使用 Glide v4 GlideApp 实例:
GlideApp.with(view.getContext())
.load(url)
.centerCrop()
.into(view);
如果使用数据绑定:
@BindingAdapter("glideCropCenter")
public static void setProgress(ImageView view, string url) {
GlideApp.with(view.getContext())
.load(url)
.centerCrop()
.into(view);
}
在xml中:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:glideCropCenter="@{viewModel.url}" />
你可以调用.override(horizontalSize, verticalSize)。这将在 ImageView 中显示之前调整图像的大小。
Glide.with(context)
.load(url)
.override(horizontalSize, verticalSize)//resizes the image to these dimensions (in pixel).
.into(img);
我的解决方案是忽略 BitmapTransformation for FIT_XY 缩放类型。
也将比例类型设置为相应的类型,如下所示,
val options = RequestOptions()
mDesignOptions?.bgScaleType?.let {
mScaleType = it
}
if (mScaleType == Settings.SCALE_TYPE_CENTER_CROP) {
imgView.scaleType = ImageView.ScaleType.CENTER_CROP
options.transform(CenterCrop())
} else if (mBgScaleType == Settings.SCALE_TYPE_ORIGINAL) {
imgView.scaleType = ImageView.ScaleType.FIT_CENTER
options.transform(FitCenter())
} else {
imgView.scaleType = ImageView.ScaleType.FIT_XY
}
Glide.with(applicationContext)
.load(imgPath) // Uri of the Photo
.apply(options)
.into(imgView)