如何添加动画?

时间:2014-04-15 11:25:23

标签: android android-animation live-wallpaper

我正在尝试使用matrix.setRotate(45)等向动态壁纸添加不同的动画,但它不起作用。它只是以45度显示图片。我以为它会旋转到45度?

我想为幻灯片动态壁纸添加不同的动画,例如旋转,淡入淡出,翻译,转换,缩放等。

我甚至尝试过

matrix.setRotate(90);

matrix.setTranslate(100,100);

但这些照片显得非常奇怪。也许,有任何动画......

我知道如何将res / anim / animation.xml中的动画应用到 NONE动态壁纸,但我似乎无法找到将此animation.xml应用于动态壁纸的方法

是否可以轻松地将动画应用于动态壁纸

非常感谢您的帮助。

Java代码:

...

.....

...

private void drawFrame() {
    // TODO Auto-generated method stub
    final SurfaceHolder holder = getSurfaceHolder();
    Canvas c = null;
    try {
        c = holder.lockCanvas();
        if (c != null) {


            drawPirate(c);
        }
    } finally {
        if (c != null)
            holder.unlockCanvasAndPost(c);
    }
    mhandler.removeCallbacks(drawrunnable);
        if (mVisible) {
            mhandler.postDelayed(drawrunnable);
        }
    }

private void drawPirate(Canvas c) {
    // TODO Auto-generated method stub

    Bitmap icon;              
    Matrix matrix = new Matrix();
    matrix.setRotate(45);

    icon = BitmapFactory.decodeResource(getResources(),pirates[i]);
    c.drawBitmap(icon, matrix, null);
    icon.recycle();
 }

}

1 个答案:

答案 0 :(得分:1)

我不熟悉动态壁纸,但希望我能回答你的其他一些问题。

  1. setRotate不是动画师,它会立即旋转到其设置
  2. 这样做的好方法是为drawFrame()创建一个线程并让它循环调用drawPirate(c),同时每次递增旋转值,以便在setRotate(1),setRotate中绘制图像(2)等等直到45.你可能想看看这种实现的JetBoy android示例代码。
  3. 在draw方法中分配新东西和decodeResources并不是一个好习惯。当你多次调用它时,它必须每次都创建新的东西,并且会减慢很多东西。