我有imageview,它应该只显示图像的一部分(部分适合屏幕的一部分)。用户点击后,将打开整个图像。但我无法弄明白,如何只将部分图像加载到imageview中。问题是Glide始终将图像融入到imageview中。
Glide.with(context)
.using(new FirebaseImageLoader())
.load(storageReference)
.into(imageView);
现在看起来如何。红色部分是ImageView。
我希望如何拥有它。
修改
以下代码适合,但它显示整个图像,只显示其中的一部分并且它会破坏比例。
android:scaleType="fitXY"
android:adjustViewBounds="true"
答案 0 :(得分:2)
在XML
的{{1}}中添加比例尺类型。添加此ImageView
答案 1 :(得分:1)
Glide.with(mContext)
.using(new FirebaseImageLoader())
.load(storageReference)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);
imageView.setImageBitmap(targetBitmap);
}
});
在这里,您可以根据尺寸调整Glide的位图大小。但请确保您提供的尺寸始终小于实际位图。
由于您在列表中使用此代码,因此应该全局声明Bitmap targetBitmap;
以在整个列表中重用相同的位图对象。这将减少应用程序的RAM消耗。
如果您需要进一步明确代码Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);
不要忘记将targetBitmap设为Global,否则内存影响会太高。
答案 2 :(得分:0)
只需将其添加到您的Imageview
即可page-break-inside
答案 3 :(得分:0)
将其添加到xml中
android:scaleType="fitXY"
android:adjustViewBounds="true"
答案 4 :(得分:0)
好的,谢谢Mohammed Atif,Patel Jaimin和Henry,我最终得到了以下解决方案。
<ImageView
android:id="@+id/ivImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="matrix"/>
Glide.with(this)
.using(new FirebaseImageLoader())
.load(storageReference)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Bitmap targetBitmap = Bitmap.createBitmap(resource, 0, 0, resource.getWidth(), resource.getHeight());
ivImage.setImageBitmap(targetBitmap);
final Matrix matrix = ivImage.getImageMatrix();
final float imageWidth = ivImage.getDrawable().getIntrinsicWidth();
final float scaleRatio = ivImage.getWidth() / imageWidth;
matrix.postScale(scaleRatio, scaleRatio);
ivImage.setImageMatrix(matrix);
}
});