【问题标题】:ImageView CENTER_CROP dont workImageView CENTER CROP 不起作用
【发布时间】:2014-01-17 11:20:53
【问题描述】:

欢迎大家。

我有一个必须显示 ImageView 的 LinearLayout。 imageView 必须适合 LinearLayout 的所有宽度,所以我使用 ma​​tch_parent 作为宽度,并且它必须保持纵横比,所以我使用 wrap_content 作为高度和 setAdjustViewBounds为真。但是有些东西不起作用,因为 ImageView 的宽度是正确的(它适合线性布局的宽度)但是 imageView 的高度是错误的(图像在上下部分被切割)

我尝试了所有比例类型(fit_center、fit_xy、center_crop、center_inside 等...),但我都遇到了问题(例如,如果我使用 fit_center,图像是不适合 ImageView 的整个宽度,我可以在图像的左右看到两个黑色空间,我也尝试使用 FIT_CENTER 而不使用 setAdjustViewBounds 并且我有同样的问题)

这里有一个快照:http://i.stack.imgur.com/8hrKF.png

这是我的代码:

LinearLayout onlineHolder = this.holders.get(i);
onlineHolder.setLayoutParams(
    new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
onlineHolder.removeAllViews();
ImageView imgv = new ImageView(onlineHolder.getContext());
imgv.setLayoutParams(
    new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
imgv.setAdjustViewBounds(true);
imgv.setScaleType(ImageView.ScaleType.CENTER_CROP);
Bitmap b=res.getCachedBitmapWithWidth(this.width); //obtenemos el recurso cacheado con el width correspondiente
imageElement.setBitmap(b);
imgv.setImageBitmap(b);
onlineHolder.addView(imgv);

谢谢

编辑:只有当我用绝对数字指定图像视图的宽度和高度时它才有效。例如,如果我输入 400(400 是屏幕的 50%,布局宽度)宽度和 583 高度,它可以工作,但是如果我将 MATCH_PARENT 设置为宽度,将 WRAP CONTENT 设置为高度......它不起作用......为什么?

【问题讨论】:

  • 如果将 onlineHolder 参数设置为 wrap_content 和 wrap_content,同时将 imgv 布局参数设置为 match_parent 和 match_parent,会发生什么?其他事情保持不变。
  • 图像左对齐显示,右侧有一个巨大的黑色空间
  • 我对 setImageBitmap 有点怀疑! setImageResource 为我工作。它会自动缩放
  • 它只有在我用绝对数字指定图像视图的宽度和高度时才有效。例如,如果我将宽度设置为 400,高度设置为 583,它可以工作,但如果我将 MATCH_PARENT 设置为宽度,将 WRAP CONTENT 设置为高度......它不起作用......为什么?
  • 作为警告,不断地问同一个问题,然后将其删除,最终会导致您被完全阻止提问。尝试编辑您的问题,以澄清它们。

标签: android imageview android-linearlayout android-imageview


【解决方案1】:

我在 XML 中有这个,它可以按照您想要的方式工作。看看吧。

<ImageView 
    android:id="@+id/attachedImage"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true" />

但是,如果您想在运行时执行此操作,我建议以这种方式创建 XML 并在运行时扩展视图并将其添加到您的父布局中。这肯定会奏效。

编辑:如何为 ImageView 充气。

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.your_layout_contains_image_view, null, false);
ImageView imageView = view.findViewById(R.id.attachedImage);

【讨论】:

  • 我在运行时试过了,不行。我需要用java代码来做。只有当我用绝对数字指定图像视图的宽度和高度时,它才有效。例如,如果我设置 400 宽度和 583 高度,它可以工作,但如果我将 MATCH_PARENT 设置为宽度,将 WRAP CONTENT 设置为高度......它不起作用......为什么?
  • 我检查了您上传的 ScreenShot,似乎您需要设置高度 match_parent 而不是 ImageView 的宽度。试着告诉我。
  • 顺便说一下runTime的意思是Java的意思。您还尝试在运行时执行此操作。但我要说的是,不是创建新的 ImageView,而是从 XML 资源中扩充该 ImageView。
  • 重要!把ImageView放在xml的最顶层,代码中不要设置裁剪!
猜你喜欢
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2020-07-11
  • 2017-09-27
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多