【问题标题】:How to keep the aspect ratio of a foreground image?如何保持前景图像的纵横比?
【发布时间】:2012-08-14 21:45:34
【问题描述】:

我目前有一个带有背景和前景图像的 FrameLayout。前景图像使用 alpha 具有透明度,以便看穿并观看下面的背景。

前景图像需要保持与原始位图相同的纵横比,因为它由黑屏中的透明圆圈组成,很像望远镜效果。我正在寻找任何分辨率兼容性。

不幸的是,我无法做到这一点,并且前景总是显示它的圆圈被拉伸。

这是 XML 代码的一部分:

<FrameLayout
    android:id="@+id/layout_parent"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:foreground="@drawable/foreground"
    android:foregroundGravity="center|fill_horizontal"
>

我也在尝试解决我的问题,提供两个不同的图像,一个具有 4:3 的比例,另一个具有 16:9 的比例,每个图像位于不同的可绘制文件夹中,带有 long 和 notlong 限定词。

/drawable-long/foreground.png (16:9 aspect)

/drawable-notlong/foreground.png (4:3 aspect)

还是没有成功。

你知道如何获得这种效果吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: java android foreground


    【解决方案1】:

    在您的 FrameLayout 中更改此属性:

    android:foregroundGravity="center"
    

    这会将前景drawable放置在FrameLayout的中心,而不是改变它的大小。

    "center|fill_horizontal" 会将其置于中心并拉伸其宽度以填充 FrameLayout 宽度,这显然不是您想要的。

    【讨论】:

    • 问题是我对所有可能的分辨率都有相同的位图,并且仅使用 center 限定符将在较大的中心显示我的前景图像,尺寸较小分辨率屏幕。我希望图像适合屏幕宽度并具有相同的纵横比。
    • 那么,如果前景图像是一个圆形(并假设它是一个正方形drawable),试试center|fill_horizontal|fill_vertical
    • 作为一个正方形可绘制对象,使水平和垂直填充以拉伸该正方形和其中的圆形以匹配屏幕比例。不幸的是,圆圈失去了形状。
    【解决方案2】:

    我不相信您可以更改前景或背景的比例类型。我的建议是:

    1. 在您的FrameLayout 中放置一个额外的ImageView 作为背景,并使用srcscaleType 属性来处理图像及其缩放方式。

    2. 由于它是一个简单的黑色背景,只有一个透明的圆圈,您可以将其转换为 9 色块,确保围绕圆圈均匀拉伸。圆圈不会缩放,但黑色区域会延伸以填满视图。

    如果圈子也需要扩展,我个人的建议是 1 号。

    【讨论】:

    • 似乎我无法将 ImageView 用作全屏的前景,而且我并不真正关心背景。我将尝试 9-patch 的方式并告诉它是如何进行的。
    • 为什么第一个做不到?只需将它放在 FrameLayout 中的最后一项,它就会出现在所有其他视图的顶部。
    • 使用新的ImageView作为FrameLayout的最后一项是如何解决的。非常感谢您的帮助。我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多