1

所以我刚刚开始学习如何在 Eclipse 中创建动态壁纸,我无法在随机时间后让一条简单的线条在屏幕上随机移动,有点像流星。我认为我的停止和开始也是错误的......我试图为线路设置长度限制......我使用 CubeLiveWallpaper 作为模板

    /*
     * Draw a line
     */
    void drawCube(Canvas c) {
        c.save();
        c.drawColor(0xff000000);
        drawLine(c);
        c.restore();
    }

    /*
     * Line path
     */
    void drawLine(Canvas c) {

        // Move line across screen randomly


        // 
        float startX = 0;
        float startY = 0;
        float stopX =  100;
        float stopY =  100;

        c.drawLine(startX, startY, stopX, stopY, mPaint);
    }
4

1 回答 1

1

这是一个非常开放的问题。我会尽力给你一些指示。:-)

首先,非常尊重我们在 Google 的好伙伴,Cube 示例并不总是呈现“最佳实践”。最值得注意的是,您应该“永远不要”在墙纸中使用硬编码常量……始终使用屏幕尺寸的一部分。在大多数情况下,将 onSurfaceChanged() 中的宽度和高度变量保存到类变量中就“足够好”了。我的观点是,您应该使用诸如“mScreenWidth / 4”之类的东西来表示设备宽度的四分之一而不是“100”(无论是小巧的手机还是巨大的平板电脑)。

要获取随机数,您可以使用http://developer.android.com/reference/java/util/Random.html

至于动画本身,好吧,您可以通过随机化用于在 postDelayed() 中重新安排可运行文件的延迟来随机化速率。

到目前为止,您可能想知道“棘手”的部分......画线本身。:-) 我建议从一些非常简单的事情开始,并在你关注事物时增加复杂性。比方说,例如,您生成随机的起点和终点,这样您的最终行程将是

c.drawLine(startX, startY, stopX, stopY, mPaint);

大概,你会想要画一条直线,这意味着保持一个恒定的斜率。您可以设置一个浮点“百分比”变量,初始化为零,每次通过可运行程序时,将其增加一个随机量,以便在每次通过时它都指示您希望绘制的线的“百分比”。所以你的runnable中的每个调用看起来像

c.drawLine(startX, startY, startX + percentage * deltaX, startY + percentage * deltaX * slope, mPaint);

(其中 deltaX = stopX - startX)

显然,当你达到 100% 时,你想停下来。

这真的只是一个开始。您可以随心所欲地使用动画(缓动等),例如使用这样的库:http ://code.google.com/p/java-universal-tween-engine/

根据您要达到的效果,另一种选择是使用游戏引擎,如 AndEngine。再次,相当重的责任。:-) http://code.google.com/p/andenginelivewallpaperextensionexample/source/browse/

祝你好运!

于 2011-06-23T00:50:59.900 回答