【问题标题】:It is possible to move a tiled background? (infinite scroll with TileMode.REPEAT)可以移动平铺背景吗? (使用 TileMode.REPEAT 无限滚动)
【发布时间】:2015-03-30 18:50:22
【问题描述】:

我正在开发游戏

首先,我的游戏将非常简单,所以我不希望使用库或 opengl 或画布,我宁愿使用简单的图像视图或普通视图来实现这一点,或者至少以最简单的方式来实现。 以安卓位图平铺模式为例:

public static void setBackground(Bitmap bmp, ViewGroup layout){
    BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
    bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    layout.setBackgroundDrawable(bitmapDrawable);
}

我想开发一个简单的 2D/3D 混合宇宙飞船游戏。屏幕将是来自宇宙飞船驾驶舱的画面,您将移动宇宙飞船,触摸我已经完成的操纵杆。所以背景将是宇宙背景,我的意思是一个带有星星的巨大黑色图像,这个图像必须用操纵杆移动到各个方向,模拟宇宙飞船正在改变它的方向,例如当你向右移动很多时,背景图必须从头开始,模拟飞船仍在向右移动,没有任何限制

正如我所提到的,我现在有操纵杆,并且我知道如何使用操纵杆移动图像视图,问题是我不知道如何正确创建带有图块的无限图像视图,因为当我移动包含tile imagedrawable 然后图像从屏幕上消失。

这是与无限背景一起使用的图像示例:

【问题讨论】:

  • 你找到解决办法了吗?

标签: android bitmap infinite-scroll tile android-bitmap


【解决方案1】:

我遇到了类似的问题,并找到了一个仅使用 XML 的解决方案。在高度为 50000dp 的垂直 ScrollView 中,我的平铺背景图像会根据需要重复填充此高度。因此,滚动会产生理想的星星飞过的效果(以您的图像为例)。

  • 使用 ScrollView,它的背景无关紧要。高度设置为wrap_content
  • 在这个 ScrollView 中,放置另一个布局(我碰巧有一个 ConstraintLayout)。 这是重要的背景。 高度设置为wrap_content。将其背景设置为:android:background="@drawable/repeating_background"
  • 使用以下代码创建一个名为 repeating_background.xml 的新可绘制对象:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/stars_image"
    android:tileModeY="repeat"
    />
  • tileModeY="repeat" 使 stars_image(png、jpeg 等) 仅垂直重复。您可能希望使用 tileMode="repeat",因为它可以处理 X 和 Y。tileMode="mirror" 是您可以探索的东西,因为它反映了图像,以便在背景颜色发生变化时消除任何接缝的外观。

就是这样!如果您为 ScrollView 本身设置了相同的背景,那么它只会平铺您的图像,但是当您的 ScrollView 的内容滚动时,这个平铺的背景将保持静态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2015-04-16
    • 1970-01-01
    • 2017-09-30
    • 2017-05-14
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多