可以移动平铺背景吗? (使用TileMode.REPEAT进行无限滚动)

时间:2015-01-31 10:04:05

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

我正在开发游戏

首先我的游戏将非常简单,所以我宁愿不使用库或opengl或canvas,我宁愿用简单的图像视图或普通视图来实现这一点,或者至少以最简单的方式实现。 例如使用android位图图块模式:

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混合太空飞船游戏。屏幕将是太空飞船驾驶舱的视野,你将移动宇宙飞船触摸我已经完成的操纵杆。所以背景将是一个宇宙背景,我的意思是一个巨大的黑色图像与星星,这个图像必须移动到所有方向,操纵杆模拟太空船正在改变它的方向,当你向右移动很多时,例如,背景图像必须从头开始模拟太空船仍然向右移动而没有任何限制

正如我所提到的,我现在拥有操纵杆,而且我知道如何使用操纵杆移动图像视图,问题是我不知道如何正确地创建带有图块的无限图像视图,因为当我移动背景包含瓦片图像可绘制然后图像从屏幕消失。

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

enter image description here

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,找到了仅使用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的内容滚动时,平铺的背景将保持静态。