【问题标题】:onOffsetsChanged: move BitmaponOffsetsChanged:移动位图
【发布时间】:2011-07-04 15:30:44
【问题描述】:

如果用户更改桌面,我希望将具有屏幕高度且宽度大于屏幕的位图向右或向左移动一点,以便他可以看到整个图像。

这是我的部分代码:

        int x = -1*(int)((xOffset*bmp.getWidth()));
        canvas.drawBitmap(bmp, x, 0, null);

谢谢!

【问题讨论】:

    标签: java android live-wallpaper android-canvas


    【解决方案1】:

    您可以通过 onOffsetsChanged() 中的变量 xPixels 和 yPixels 获得精确的像素值。在这里查看我的答案:android live wallpaper rescaling

    例如在onOffsetsChanged()中,可以设置一个私有类变量

    mPixels = xPixels;
    

    然后,在你的绘图程序中

    holder = getSurfaceHolder();
    c = holder.lockCanvas();
    c.translate(mPixels, 0f);
    // c.drawBitmap ... goes here :-)
    

    通常,您需要两倍于屏幕宽度的位图,并且您的作品位于中间。例如:320 像素宽度屏幕 -> 640 像素宽度位图,“中心”从 160 到 480。mPixels 在最左侧的启动器屏幕(共 5 个)处为 0,在中心为 -160,在最右侧屏幕为 -320 .

    【讨论】:

    • 不,它不起作用,当我转到最后一个屏幕时,仍然有一些黑房间......
    • @nomoral 我只能猜你犯了一个微妙的错误......位图太小,密度错误等。看不到你的代码,我只能建议你找到一个可行的开源示例,并将其与您所做的进行比较。
    • @nomoral 是,使用 xStep、xOffset 和 getDesiredMinimumWidth,如下所述:stackoverflow.com/questions/5208203/…
    • 啊,我只是不能把这些碎片放在一起。我必须如何使用 xStep、xOffset 和 getDesiredMinimumWidth 来获得 canvas.drawBitmap 的正确 x 值?
    • @nomoral 这是一个棘手的问题——如果没有我们的朋友 Eclipse,很难做到正确。我在上面扩展了我的答案,以展示我通常是如何做事的……在绘图之前使用 xPixels 翻译画布。您可以手动计算 xPixels,但会得到相同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多