【问题标题】:How to scale the height but cut off the end of an image in Android ImageView?如何在 Android ImageView 中缩放高度但切断图像的结尾?
【发布时间】:2015-08-05 05:29:19
【问题描述】:

这更像是一个概念性的 Android 问题

假设我有这个静态图像,我想加载到 ImageView -

假设图像是 600 像素 x 200 像素。(宽 x 高)

假设我尝试将其放入的图像视图是 300 像素 x 200 像素(宽 x 高)

我只想按高度缩放并切断图像的左端,以便图像可以适合图像视图。此外,如果不需要剪裁(已经适合),我不想剪掉任何剪裁。

所以最后 ImageView(如果它是 300 像素乘 200 像素)会保存这张图片

(基本上是为了 F 不会失真)

我看过Scale To Fit,但似乎没有一种比例类型可以实现这种自定义效果。有谁知道我会怎么做?就我而言,我不想保持原来的纵横比。

【问题讨论】:

标签: android image imageview scale android-screen


【解决方案1】:

您应该裁剪位图,使其始终适合您的 ImageView。如果你想裁剪右下角,你可以做类似的事情:

if (needsCropping()) {
    int startWidth = originalImage.getWidth() - 300;
    int startHeight = originalImage.getHeight() - 200;


    Bitmap croppedBitmap = Bitmap.createBitmap(originalImage, startWidth, startHeight, width, height);

    // TODO set imageview
}

【讨论】:

  • 您是否需要为此方法创建自定义图像视图?
  • 如果您在多个不同的地方使用它,您可以创建自定义图像视图,但这不是必需的。
  • 你会如何首先根据高度进行缩放?
  • 缩放后的位图应该与 ImageView 的宽高完全匹配,所以不需要设置 scaleType 标志
【解决方案2】:

FIT_END 会这样做: 计算将保持原始 src 纵横比的比例,但也将确保 src 完全适合 dst。至少一个轴(X 或 Y)将完全适合。 END 将结果与 dst 的右边缘和下边缘对齐。

您可以使用 ScaleType.CENTER_CROP 但这不会以任何方式重新缩放图像。

这些的任何组合都是不可能的,因为你必须有自己的缩放方法(子类化 ImageView)。

或者,最简单的方法是将 .9PNG 作为图像的来源,它可以适合任何空间而不会失真。

【讨论】:

  • 我试过 FIT_END。宽度(x 轴)完全适合。但问题是 Y 根本没有,顶部有所有这些空间。你知道解决办法吗?
  • 您有两个选择,覆盖 ImageView 或使用更容易的 9PathPNG。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多