2015-06-20 67 views
0

我已经按照本教程中的说明: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给出错误Can not Resolve Symbol。我认为这是因为他们超出了这些方法的范围?

我想我解释说明错了,但我无法弄清楚我错了什么地方。

回答

0

该tut包含一个错误 - 它说“将以下代码添加到GIFWallpaperService类:”它应该说将它添加到GIFWallpaperEngine类。

0

我有同样的疑难问题创造了一个活动,通过了一项意图来运行wallpaper.here是你的答案

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); 
} 

}