Papel de parede ao vivo do Android - não mostra a imagem de fundo?
Pergunta
Comecei a implementação do Android Live Wallpaper, seguindo os exemplos e tutoriais encontrados na Internet, e não posso incluir fundo PNG como papel de parede. Também verificado com problemas semelhantes aqui e ainda não pode fazê -lo funcionar.
Este é o código:
public class LiveWallpaper extends WallpaperService {
/* IDs of recurces needed for animations*/
private SurfaceHolder holder;
private static final String TAG = "MyActivity";
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public Engine onCreateEngine() {
return new WallpaperEngine();
}
class WallpaperEngine extends Engine {
public final Runnable mDrawWallpaper = new Runnable(){
public void run(){
drawWallpaper();
}
};
@Override
public void onCreate(SurfaceHolder surfaceHolder){
super.onCreate(surfaceHolder);
setTouchEventsEnabled(false);
loadImagesIntoMemory(R.drawable.wallpaper);
holder = getSurfaceHolder();
}
void drawWallpaperContent(Canvas c, int resourceId){
Bitmap decodeResoure = BitmapFactory.decodeResource (getResources(), resourceId);
c.drawBitmap(decodeResoure, 0, 0, null);
}
void drawWallpaper(){
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
c = holder.lockCanvas();
if(c!=null){
c.save();
drawWallpaperContent(c, R.drawable.wallpaper);
c.restore();
}
}
private void loadImagesIntoMemory(int resourceId){
Resources res = getResources();
BitmapFactory.decodeResource(res, resourceId);
}
@Override
public void onDestroy(){
super.onDestroy();
mHandler.removeCallbacks(mDrawWallpaper);
}
}
}
O bitmap é armazenado na pasta desenhada e a versão do Android SDK é 2.2. Depois de lançar o papel de parede ao vivo, só recebo 'papel de parede de carregamento' sem mostrar a imagem do papel de parede.
Alguém sabe qual poderia ser o problema?
Obrigada. DJ.
Solução
Use isso em seu empate
'Bitmap image = bitmapFactory.DecODeResource (getResources (), r.Drawable.image);'
canvas.drawBitmap(image, 0, 0, paint);
Você pode passar nulo no parâmetro de tinta. estou usando isso e está funcionando
Outras dicas
Eu lutei com um problema semelhante, c.drawColor(0xff000000);
Antes de desenhar o bitmap, foi a solução para mim.