Живые обои с изображениями

(Извините за моего Englih не так хорошо … надеюсь, вы поймете меня)

Мой друг – действительно хороший ящик. Я хотел бы помочь ему стать хорошим ящиком, сделав ему живые обои, анимированные его рисунками.

Я бы хотел, чтобы он рисовал несколько кадров и использовал эти кадры для создания живых обоев, отображая их один за другим.

Я изо всех сил пытаюсь отобразить одно изображение, а затем немного подождать и отобразить следующий. Я совершенно уверен, что мне не удастся это сделать, потому что я не использую правильный подход …

Это то, что я сделал до сих пор:

public class Cercle extends WallpaperService { public void onCreate() { super.onCreate(); } public void onDestroy() { super.onDestroy(); } public Engine onCreateEngine() { return new CercleEngine(); } class CercleEngine extends Engine { public Bitmap image1, image2, image3; CercleEngine() { image1 = BitmapFactory.decodeResource(getResources(), R.drawable.img1); image2 = BitmapFactory.decodeResource(getResources(), R.drawable.img2); image3 = BitmapFactory.decodeResource(getResources(), R.drawable.img3); } public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); } public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { drawFrame(); } void drawFrame() { 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); } } } } 

Этот код просто отображает фотографии слишком быстро, потому что я не знаю, как подождать между diplaying изображениями …

Может ли кто-нибудь дать мне несколько советов или показать мне пример другого решения?

Спасибо !

ОБНОВИТЬ :

Я решил проблему, добавив Runnable:

 private final Runnable drawRunner = new Runnable() { @Override public void run() { drawFrame(); } }; 

А затем добавив:

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

В конце drawFrame ().

Надеюсь, это поможет кому-то.

Используйте этот проект с открытым исходным кодом для создания приятных живых обоев для своего друга

Ссылку читается из телефонной галереи, вы можете отредактировать ее, чтобы читать из папки в проекте, которую просто использовать, как есть.

Или использовать эту ссылку для других проектов живых обоев

@Pozinux … Я новый программист. Я натолкнулся на этот код, который вы слышали. Я пытаюсь использовать код в своем проекте. Но я не могу заставить его работать. Когда я устанавливаю его в эмулятор, он не перемещается по его кадрам. Он показывает только последний кадр. Как вы это настроили? Или заставить это работать? Слушает, как я настроил его в своем проекте.

 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.service.wallpaper.WallpaperService; import android.view.SurfaceHolder; public class WallpaperSer extends WallpaperService { public void onCreate() { super.onCreate(); } public void onDestroy() { super.onDestroy(); } public Engine onCreateEngine() { return new WallpaperSerEngine(); } class WallpaperSerEngine extends Engine { public Bitmap image1; public Bitmap image2; public Bitmap image3; public Bitmap image4; public Bitmap image5; public Bitmap image6; public Bitmap image7; public Bitmap image8; public Bitmap image9; public Bitmap image10; public Bitmap image11; public Bitmap image12; public Bitmap image13; public Bitmap image14; public Bitmap image15; public Bitmap image16; public Bitmap image17; public Bitmap image18; public Bitmap image19; public Bitmap image20; WallpaperSerEngine() { image1 = BitmapFactory.decodeResource(getResources(), R.drawable.and1); image2 = BitmapFactory.decodeResource(getResources(), R.drawable.and2); image3 = BitmapFactory.decodeResource(getResources(), R.drawable.and3); image4 = BitmapFactory.decodeResource(getResources(), R.drawable.and4); image5 = BitmapFactory.decodeResource(getResources(), R.drawable.and5); image6 = BitmapFactory.decodeResource(getResources(), R.drawable.and6); image7 = BitmapFactory.decodeResource(getResources(), R.drawable.and7); image8 = BitmapFactory.decodeResource(getResources(), R.drawable.and8); image9 = BitmapFactory.decodeResource(getResources(), R.drawable.and9); image10 = BitmapFactory.decodeResource(getResources(), R.drawable.and10); image11 = BitmapFactory.decodeResource(getResources(), R.drawable.and11); image12 = BitmapFactory.decodeResource(getResources(), R.drawable.and12); image13 = BitmapFactory.decodeResource(getResources(), R.drawable.and13); image14 = BitmapFactory.decodeResource(getResources(), R.drawable.and14); image15 = BitmapFactory.decodeResource(getResources(), R.drawable.and15); image16 = BitmapFactory.decodeResource(getResources(), R.drawable.and16); image17 = BitmapFactory.decodeResource(getResources(), R.drawable.and17); image18 = BitmapFactory.decodeResource(getResources(), R.drawable.and18); image19 = BitmapFactory.decodeResource(getResources(), R.drawable.and19); image20 = BitmapFactory.decodeResource(getResources(), R.drawable.and20); } public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); } public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { drawFrame(); } void drawFrame() { 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); c.drawBitmap(image4, 0, 0, null); c.drawBitmap(image5, 0, 0, null); c.drawBitmap(image6, 0, 0, null); c.drawBitmap(image7, 0, 0, null); c.drawBitmap(image8, 0, 0, null); c.drawBitmap(image9, 0, 0, null); c.drawBitmap(image10, 0, 0, null); c.drawBitmap(image11, 0, 0, null); c.drawBitmap(image12, 0, 0, null); c.drawBitmap(image13, 0, 0, null); c.drawBitmap(image14, 0, 0, null); c.drawBitmap(image15, 0, 0, null); c.drawBitmap(image16, 0, 0, null); c.drawBitmap(image17, 0, 0, null); c.drawBitmap(image18, 0, 0, null); c.drawBitmap(image19, 0, 0, null); c.drawBitmap(image20, 0, 0, null); } } finally { if (c != null) holder.unlockCanvasAndPost(c); } } } }