我可以在自定义画布上放置固定图层吗?

时间:2017-12-05 18:57:03

标签: java android android-canvas android-drawable bitmapfactory

在Android Studio中,我正在开发一款游戏,我使用SurfaceView对象以60fps的速度绘制动画。我使用半透明图像作为顶层来隐藏比赛场地的边缘 - 有点像“战争迷雾”效果,这样玩家就不知道在阴影之外会发生什么。

我的问题是我需要为每一帧绘制这个阴影图像,即使即使游戏场向右/向左/向上/向下滚动,阴影也不会改变或移动。它是一个全屏图像,所以它会让游戏变慢。

有没有办法在动画自定义画布上创建一次性叠加ONCE?我还想与它下面的画布进行交互,好像叠加层甚至不存在。

sample fogs-of-war effect

2 个答案:

答案 0 :(得分:1)

根据Thomas Stevens的回复,我研究了使用ImageView覆盖SurfaceView的选项。我的解决方案是添加一个包含所需ImageView的FrameLayout。 (这样,我只需通过更新布局XML就可以向叠加层添加其他视图。)

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //temporarily set the view to the overlay layout to gain access to the frame
    setContentView(R.layout.overlay_game);
    FrameLayout overlayLayout = (FrameLayout)findViewById(R.id.gameOverlayFrame);

    //set the final view to the active game surface (a Java-coded SurfaceView object)
    setContentView(new GameSurface(this));
    //add the overlay view on top of the game surface view
    addContentView(overlayLayout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
}

我并不认为这是解决方案......只是对我有用的解决方案。

答案 1 :(得分:0)

您是否尝试将全屏幕ImageView放在表面视图上并设置战争迷雾"图像到此,应该画一次(这假设你的背景是"战争的雾是透明的")。

如果你需要更高级的东西,那么ViewOverlay应该覆盖你,但我的理解是当个人观点希望超出其动画界限时使用,因为你使用全屏幕表面视图这应该是不必要的

https://developer.android.com/reference/android/view/ViewOverlay.html

也没有理由不在表面视图上粘贴表面视图。一个用于战争迷雾/屏幕效果,一个用于游戏界面。