Java Android绘制位图、绘图和文本的顺序?

Java Android绘制位图、绘图和文本的顺序?,java,android,Java,Android,我正在用android创建一个小游戏。任何需要在屏幕上绘制的内容都扩展了VisibleObject类,然后我有了一个Manager类,我可以将所有可见的游戏对象添加到该类中,并告诉Manager调用其中所有内容的绘制函数 以下是初始化并添加到管理器中的对象: @Override public void surfaceCreated(SurfaceHolder holder) { fps = new TextDrawable(Color.BLACK, 14, 100, 4

我正在用android创建一个小游戏。任何需要在屏幕上绘制的内容都扩展了VisibleObject类,然后我有了一个Manager类,我可以将所有可见的游戏对象添加到该类中,并告诉Manager调用其中所有内容的绘制函数

以下是初始化并添加到管理器中的对象:

@Override
    public void surfaceCreated(SurfaceHolder holder) {

        fps = new TextDrawable(Color.BLACK, 14, 100, 40, 40);
        player = new Player();
        map = new Map();
        leftTouch = new TouchCircle(Color.GRAY);

        manager.add("fpsText", fps);
        manager.add("leftTouch", leftTouch);
        manager.add("player", player);
        manager.add("map", map);

        gameloop = new GameLoop(getHolder(), this, fps);            
        gameloop.setRunning(true);
        gameloop.start();

    }
现在我遇到的问题是绘制顺序,如果查看对象添加到管理器以供参考的顺序

我可以肯定地告诉你,这名球员被拉上了球门 地图!它们都是通过使用drawBitmap绘制各自的位图来绘制的。。。 但是,文本和leftTouch正在地图下方绘制!这些是使用drawText绘制的。。还有拉维奥瓦。。分别地 即使它们实现了不同的Canvas.draw。。函数,我希望它们都是按顺序绘制的,因为我只是将画布对象传递给我的manager类,然后让manager循环遍历传递画布的每个对象

有人能帮我弄清楚为什么位图看起来是在上面绘制的,解决方案应该是什么,让我的fps和触摸区域绘制在播放器和贴图位图上方?我会很感激的

编辑:我正在使用私有ConcurrentSkipListMap对象映射;在我的管理器中存储对象和图形,如下所示

public void draw(Canvas c){
        for (Map.Entry<String, VisibleObject> object : objectMap.entrySet()){
            synchronized(object){
                object.getValue().draw(c);
            }
        }
    }

除非在绘制文本和位置重叠后绘制位图,否则不会在文本顶部绘制位图

您还没有公开onDraw方法,所以我不能确定,但我怀疑您没有按正确的顺序调用绘图方法。
您的manager如何存储添加到其中的值?也许您使用的映射实现不维护添加元素的顺序,但大多数实现都不维护添加元素的顺序。

啊,这很有趣!我用更多的代码编辑了我的问题。。但我使用的是ConcurrentSkipListMap,我刚刚又读了一遍文档,它说地图是根据其键的自然顺序排序的,所以我猜这意味着按字母顺序排列,doh!:p您认为最合适的储存容器是什么?非常感谢您的帮助是的,它的意思是按字母顺序排列,所以不是按顺序添加元素。如果您真的需要Map,LinkedHasmap会更合适,但是从您公开的代码中,我看不出需要Map,您可以使用类似于ArrayList的列表实现。