我的动态壁纸不会编译和运行

时间:2015-06-20 23:42:48

标签: java android live-wallpaper

我已按照本教程中的说明操作:http://code.tutsplus.com/tutorials/create-a-live-wallpaper-on-android-using-an-animated-gif--cms-23088

但我遇到了一些错误,无法运行我的项目。

这是我的全部代码:

我的清单:

 <service
    android:name=".GIFWallpaperService"
    android:enabled="true"
    android:label="Raindrops In Paris"
    android:permission="android.permission.BIND_WALLPAPER" >
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService"/>
    </intent-filter>
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/wallpaper" >
    </meta-data>
</service>

<uses-feature
    android:name="android.software.live_wallpaper"
    android:required="true" >
</uses-feature>

我的Java课程:

package com.gacafw.gina.raindropsinparis;

import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
import android.view.SurfaceHolder;

import java.io.IOException;


public class GIFWallpaperService extends WallpaperService {




@Override
public WallpaperService.Engine onCreateEngine() {
    try {
        Movie movie = Movie.decodeStream(
                getResources().getAssets().open("rainDropAna.gif"));

        return new GIFWallpaperEngine(movie);
    }catch(IOException e){
        Log.d("GIF", "Could not load asset");
        return null;
    }
}

private Runnable drawGIF = new Runnable() {
    public void run() {
        draw();
    }
};

private void draw() {
    if (visible) {
        Canvas canvas = holder.lockCanvas();
        canvas.save();
        // Adjust size and position so that
        // the image looks good on your screen
        canvas.scale(3f, 3f);
        movie.draw(canvas, -100, 0);
        canvas.restore();
        holder.unlockCanvasAndPost(canvas);
        movie.setTime((int) (System.currentTimeMillis() % movie.duration()));

        handler.removeCallbacks(drawGIF);
        handler.postDelayed(drawGIF, frameDuration);
    }
}

@Override
public void onVisibilityChanged(boolean visible) {
    this.visible = visible;
    if (visible) {
        handler.post(drawGIF);
    } else {
        handler.removeCallbacks(drawGIF);
    }
}

private class GIFWallpaperEngine extends WallpaperService.Engine {

    private final int frameDuration = 20;

    private SurfaceHolder holder;
    private Movie movie;
    private boolean visible;
    private Handler handler;

    public GIFWallpaperEngine(Movie movie) {
        this.movie = movie;
        handler = new Handler();
    }

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
        super.onCreate(surfaceHolder);
        this.holder = surfaceHolder;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(drawGIF);
    }
    }

}

我的wallpaper.xml

<?xml version="1.0" encoding="UTF-8"?>
<wallpaper
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="Raindrops In Paris"
android:thumbnail="@drawable/ic_launcher">
</wallpaper>

我目前的错误:

draw()和onVisibilityChanged()中的变量visible,holder,movie,handler给出错误无法解析符号。我认为这是因为它们超出了这些方法的范围?

我认为我解释说明错了,但我无法弄清楚我哪里出错了。

2 个答案:

答案 0 :(得分:0)

tut包含错误 - 它表示&#34;将以下代码添加到GIFWallpaperService类:&#34;应该说把它添加到GIFWallpaperEngine类。

答案 1 :(得分:0)

我遇到了同样的问题。我创建了一个An Activity并传​​递了一个运行壁纸的意图。这是你的答案

public class SetWallpaperActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Intent intent = new Intent(
            WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
    intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
            new ComponentName(this, GIFWallpaperService.class));
    startActivity(intent);
}

}