【问题标题】:How to reuse a bitmap on android如何在android上重用位图
【发布时间】:2023-03-05 18:07:01
【问题描述】:

我有以下代码:

    public void loop1(int times, SpriteObject[] obj){
        for(int i = 0; i < times; i++){
            obj[i] = new SpriteObject(BitmapFactory.decodeResource(gv.getResources(),  R.drawable.bar1), 500,720);
        }
     }

但是,当我在视图上绘制它时,它并没有像我预期的那样保持不变。 如果我使用 obj[i].setX(10) 和 obj[5].setX(20)。只有第二个出现,因为它正在刷新并且只获取最后一个对象。是否可以像这样重用可绘制对象?

【问题讨论】:

    标签: android bitmap drawable


    【解决方案1】:

    我不完全理解您在这里要完成的工作,对我来说,您的资源加载方法似乎完全设置错误。据我所知,您正试图让两个相似的位图四处移动。

    首先,对于简单的绘图应用程序或游戏,您将使用视图或表面视图,因此您必须实现它。其次,我创建移动位图的方式是首先创建位图变量来保存相应的位图,然后为每个相应的位图创建一个单独的类。在课程中,我有以下内容。

    public float x = 0; public float y = 0;

    因此,考虑到这一点,绘制位图所需要做的就是在View 的 onDraw 方法中使用此方法。 canvas.drawBitmap(bitmapVariable, bitmap.x, bitmap.y, null);

    如果您想移动位图,您只需更改相应位图的 X 和 Y。在单独的方法中或在您的更新循环中。

    最终,我认为您对位图的理解是错误的。创建后,您无需重新创建它即可在其他位置重新绘制它,除非该位图已被垃圾回收。

    【讨论】:

    • 你当时不明白我的问题。我有一个代码正在运行。没问题。我已经设置了所有这些。但是,我不打算在屏幕中移动位图,而是将它彼此相邻放置。但它并没有停留在屏幕上,而是随着移动。想象 X 是我的位图。我想在屏幕上循环打印:>X第一次>XX第二次>XXX第三次……但我得到的是:>X第一次>X第二次>X第三次
    • 你能多展示一些你的代码吗?很难说出您发布的内容出了什么问题。调用该方法的内容以及所涉及的变量如何被实例化会有所帮助
    • 只是认为每个 obj[i] 都是我在屏幕上绘制的东西。首先我在 x=500, y=720 处绘制 obj[0]。然后 obj[1] at x=520, y=720, obj[2] at x=540, y=720 等等......即使我创建了该位图的新对象:obj[i] = new SpriteObject( BitmapFactory.decodeResource(gv.getResources(), R.drawable.bar1), 500,720);它仍然将它视为同一个对象..我认为它可能是位图在可绘制而不是在我的代码中......
    • 在您的代码中,当您调用该方法时,您将在同一位置创建一个新对象。 (500,720) 也许如果您将代码修改为 (500 + i * 20, 720),您会得到您想要的结果。但在我看来,你现在画东西的方式可能会奏效,但将来肯定会给你带来很多麻烦。
    • 我已经找到了问题所在。我什至不需要相同位图的数组。我可以重复使用相同的。问题出在 draw(canvas) 方法上。我现在在我的绘图上有一个 for 循环,所以我绘制了我第一次显示的以前的图像!谢谢你试图帮助我;D
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2014-01-16
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多