我们说我从API获取了一些图片。我不知道图像的尺寸会提前是什么,但我知道我希望该图像成为我设置为某个特定尺寸的src
的{{1}}。我想要从API获得的任何图像来填充整个ImageView
,我想保留纵横比,并且我不在乎是否一个尺寸(宽度或高度)对于设定的尺寸而言太大视图 - 所以我使用ImageView
。
centerCrop
如果从API返回的图像是:
当它被设置为<ImageView
android:layout_width="400px"
android:layout_height="300px"
android:scaleType="centerCrop" />
的src时,结果将类似于此(阴影部分被裁剪掉):
然而,我得到一个请求,我们应该始终显示图像的顶部并从下往上裁剪。所以期望的结果是这样的:
我确信这是可能的,但我是一个在他的联盟中运作的网络人。是以某种方式扩展ImageView
,还是尝试ImageView
和scaleType="matrix"
,或者第三个未提及的选项会更好吗?
答案 0 :(得分:4)
app.directive('selectOnClick', function ($window, $compile) {
return {
link: function (scope, element) {
element.on('mouseup', function () {
if (window.getSelection) {
var sel = window.getSelection();
var template = '<a href="#" uib-tooltip="hello">'+sel.toString()+'</a>';
replaced = element.html().replace(new RegExp(sel.toString(), "g"), template);
element.html(replaced);
$compile(element.contents())(scope);
}
});
}
}
});
答案 1 :(得分:2)
如果您使用的是Glide,则可以使用自定义转换。随意使用我的(这是Glide的CenterCrop类的几乎完全副本),它占用了百分比:
https://gist.github.com/bjornson/3ff8888c09908d5c6cc345d0a8e1f6a7
像任何其他位图转换一样使用它:
Glide.with(getContext())
.load(imagePath)
.transform(new PositionedCropTransformation(getContext(), 1, 0))
.into(imageView);
急需的价值观: 左上方: 0,0 右上: 0,1 左下方: 1,0 右下: 1,1,
使用0.5f作为中心
答案 2 :(得分:1)
PositionedCropTransformation转换后的代码以支持Glide v4.x https://gist.github.com/bjornson/3ff8888c09908d5c6cc345d0a8e1f6a7
答案 3 :(得分:0)
如果您正在使用Glide,则可以通过以下方式使用optionalTransform:
Glide.with(context).load("http:///...")
.override(300, 300)
.optionalTransform(
new Transformation<Bitmap>() {
@NonNull
@Override
public Resource<Bitmap> transform(@NonNull Context context,
@NonNull Resource<Bitmap> resource, int outWidth, int outHeight) {
resource.get().setHeight(YOUR_CUSTOM_HIGHT);
return resource;
}
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
}
}
)
into(binding.img);