【问题标题】:Buttons Over Image Android图像上的按钮 Android
【发布时间】:2015-05-18 14:17:19
【问题描述】:

我正在为我的应用开发一项功能,用户可以在其中单击放置在图像背景中的按钮。问题:我需要将按钮放置在图像中的特定位置,这样它就不会看起来移位并且可以动态地适应不同类型的设备分辨率。这是一个图像示例:

我想将按钮准确地放置在这些圆角方块所在的位置。我如何确定它们在不同设备中的外观也完全相同?我可能需要在每个按钮上方放置一些文本。他们必须是可点击的按钮,我在按钮上有一些动画,让用户知道何时点击按钮。非常感谢任何线索。任何可行的解决方案都可能是公认的答案。

部落冲突的游戏也有类似的:

这正是我想要达到的目标!

【问题讨论】:

  • 问题/错误是什么?
  • 这是一个游戏。它的做法完全不同。游戏将所有内容直接绘制到屏幕上。它不使用任何标准的 android 布局。你可以尝试找一些像 libGdx 这样的游戏引擎,但是你不会用标准的 android 布局这样做
  • 我不是在做游戏,只是那种结构对我来说很有趣。但它看起来有一个图像作为背景。地图是图像背景,按钮和点可能以编程方式绘制,但我可能错了!

标签: android button background


【解决方案1】:

由于有很多 Android 设备,实际上您无法在所有设备上完全显示按钮。您可以使用 RelativeLayout 或 LinearLayout 来确保顶部标题将在按钮上方

会有一个有两个子视图的父视图:一个用于标题,另一个用于所有按钮

【讨论】:

  • 在我知道如何放置按钮后,我得到了文本将如何放置它们,但是如何确保将按钮放置在图像中的某个位置?这样按钮就不会停留在尾随(那些点)
【解决方案2】:

如果您使用RelativeLayout,您可以将按钮放置在图像中的任何位置。

只需确保您使用 DP 测量单位,并为每种密度设置合适的图像尺寸。

一个简短的例子:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <Button android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp" />
    <Button android:layout_marginLeft="30dp"
        android:layout_marginTop="30dp" />
    <Button android:layout_marginLeft="10dp"
        android:layout_marginTop="50dp" />
</RelativeLayout>

【讨论】:

  • 所以我会使用尝试和错误来准确找到按钮应该在哪里?通过使用边距,他们不会在不同的手机分辨率下得到不同的位移吗?它们需要恰好在那些圆角正方形内,因为它们在按钮之间有尾随。像一个任务地图
  • 如果您使用的是使用与密度无关的像素缩放的大小合适的图像,您可以使用 DP 来确定按钮的 x 和 y。
  • 使用 dp 缩放的适当大小的图像是什么意思?你的意思是调整背景图片的大小?
  • 通常你会为不同的屏幕密度设置多个图像。 HDPI、XHDPI 等。但是,这主要用于图标。大图像可能会显着增加您的 APK 大小。你可以用一张更大的图像侥幸逃脱,让 Android 为你缩小它。只需正确设置您的 layout_width 和 height。
【解决方案3】:

我通过使用设备宽度和高度的百分比找到了一个破解的解决方案。它适用于平板电脑和另外 2 种不同屏幕尺寸的设备。

    int w = front_layout.getWidth();
    int h = front_layout.getHeight();

    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    int top = convert(h * 0.248f);
    int bottom = 0;
    int left = convert(w * 0.186f);
    int right = 0;

    params.setMargins(left, top, right, bottom);
    btn1.setLayoutParams(params);

private int convert(float value) {
    return (int) Math.ceil(value);
}

唯一的缺点是我必须通过尝试和错误来找到确切的百分比。更好的解决方案将为我接受的答案评分!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多