2012-07-03 2 views
1

일련의 이미지가있는 간단한 라이브 배경 화면을 만들고 싶습니다. 필요한 유일한 애니메이션은 각 이미지가 페이드 인하 고 페이드 아웃하는 것입니다.이미지 시퀀스가있는 간단한 Android 라이브 배경 화면 - 코드로 업데이트 됨

LWP에서 온라인으로 찾은 모든 자습서는 화려한 애니메이션과 그리기를 위해 Draw 캔버스를 사용하는 방법을 보여줍니다. 이것은 내 애플 리케이션을 위해 필요하지 않습니다, 나는 단지 이미지 모음을 통해 반복하고 싶다.

초심자 프로그래머이므로 일련의 이미지를 반복하는 방법과 배경 무늬로 표시하는 방법을 배우는 데 도움이 필요합니다.

누구든지 일부 코드를 공유하거나이를 위해 좋은 지침서를 가르쳐 주시겠습니까?

UPDATE

내 장치의 LWP로드되지만 바탕 화면이 변경되지 않습니다. image3, ironman에 붙어 있습니다

여기에 제가 지금까지 가지고있는 코드가 있습니다. draw()에서 뭔가 잘못하고 있다고 가정합니다.

public class Wallpaper extends WallpaperService { 
public void onCreate() { 
    super.onCreate(); 
} 

public void onDestroy() { 
    super.onDestroy(); 
} 

public Engine onCreateEngine() { 
    return new CercleEngine(); 
} 

class CercleEngine extends Engine { 

    private final Handler handler = new Handler(); 
    private final Runnable drawRunner = new Runnable() { 
     @Override 
     public void run() { 
      draw(); 
     } 
    }; 
    private boolean visible = true; 
    public Bitmap image1, image2, image3; 

    CercleEngine() { 
     image1 = BitmapFactory.decodeResource(getResources(), 
       R.drawable.batman); 
     image2 = BitmapFactory.decodeResource(getResources(), 
       R.drawable.captainamerica); 
     image3 = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ironman); 
    } 


    public void onCreate(SurfaceHolder surfaceHolder) { 
     super.onCreate(surfaceHolder); 
    } 

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

    @Override 
    public void onSurfaceDestroyed(SurfaceHolder holder) { 
     super.onSurfaceDestroyed(holder); 
     this.visible = false; 
     handler.removeCallbacks(drawRunner); 
    } 

    public void onOffsetsChanged(float xOffset, float yOffset, float xStep, 
      float yStep, int xPixels, int yPixels) { 
     draw(); 
    } 

    void draw() { 
     final SurfaceHolder holder = getSurfaceHolder(); 

     Canvas c = null; 
     try { 
      c = holder.lockCanvas(); 
      if (c != null) { 
       c.drawBitmap(image1, 0, 0, null); 
       c.drawBitmap(image2, 0, 0, null); 
       c.drawBitmap(image3, 0, 0, null); 
      } 
     } finally { 
      if (c != null) 
       holder.unlockCanvasAndPost(c); 
     } 

     handler.removeCallbacks(drawRunner); 
     if (visible) 
     { 
      handler.postDelayed(drawRunner, 1000); // delay 1 sec 
     } 

    } 
} 

답변

1

이미지 배열을 통해 반복을 둘러싼 쉬운 방법은 없습니다. 수동으로 수행해야합니다.

당신이 채택 할 수있는 접근법 중 하나는 이미지를/res/drawable 으로 유지 한 다음 int [] 배열을 사용하여 이미지의 잔상을 저장 한 다음 반복하는 것입니다. 잘은 라이브 배경 화면에 튜토리얼을 설명

여기에서 찾을 수있다 : 나는 vogella 튜토리얼을 검토 한

+0

http://www.vogella.com/articles/AndroidLiveWallpaper/article.html

행운을 빕니다. 휴대 전화에 라이브 배경 화면이 있지만 한 이미지에 남아 있습니다. 나는 내 코드를 공유 할 것이다. – tiptopjat

+0

@tiptopjat 당신은 페이드 인과 페이드 아웃으로 이미지의 시퀀스로 라이브 배경 화면을 개발할 수 있습니다. 나는 또한 당신이 나를 도울 수있는 동일한 문제로 삼진입니다. – Miracle