Живые обои с использованием последовательности изображений

Ну, привет всем. Это мой первый в истории Android проект. Я пытаюсь создать живые обои с последовательностью изображений, полученных из видео. Размеры каждого изображения - 960 x 800. Пока живые обои работают, но у меня все еще есть проблемы, которые я не смог решить.

  1. Когда установлено, живые обои показывают только часть всего png. Мне удалось заставить его прокручивать изображения по ширине, и он прокручивается, но показывает только часть всей ширины. И это только показывает часть высоты всего изображения, примерно до половины изображения на портрете, и только часть этого сверху вниз на ландшафте. Мне бы хотелось, чтобы живые обои выглядели красиво и соответствовали экрану телефона как в портретном, так и в ландшафтном режиме.

  2. Это работает, но это вроде паузы. И он продолжает работать, только когда я переключаю экраны. Чтобы быть более конкретным в этом вопросе, это то, что когда вы устанавливаете его, он анимирует, но внезапно останавливается на половине цикла, когда вы переключаете экраны, он продолжает работать немного больше, то есть он немного продвигается в последовательности. И чтобы закончить последовательность и начать все сначала, вам нужно продолжать проходить через экраны.

  3. Я бы хотел, чтобы последовательность шла быстрее, как будто это видео.

ЗДЕСЬ МОЙ КОД::

package com.livewallpaper.mw3lwp;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;

public class ModernWarfare3LiveWallpaper extends WallpaperService {
    private final Handler handler = new Handler();
    public float mxOffset;
    public void onCreate() 
    {
        super.onCreate();
    }

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

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

    class CercleEngine extends Engine {

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

            }
        };

        public Bitmap myBg;
        int bgcycle = 0;

        public void updateBG() {
            if(bgcycle==50){
                bgcycle=0;
            }

            switch (bgcycle) {
                case 0: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n01); break;
                case 1: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n02); break;
                case 2: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n03); break;
                case 3: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n04); break;
                case 4: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n05); break;
                case 5: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n06); break;
                case 6: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n07); break;
                case 7: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n08); break;
                case 8: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n09); break;
                case 9: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n10); break;
                case 10: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n11); break;
                case 11: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n12); break;
                case 12: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n13); break;
                case 13: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n14); break;
                case 14: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n15); break;
                case 15: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n16); break;
                case 16: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n17); break;
                case 17: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n18); break;
                case 18: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n19); break;
                case 19: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n20); break;
                case 20: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n21); break;
                case 21: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n22); break;
                case 22: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n23); break;
                case 23: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n24); break;
                case 24: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n25); break;
                case 25: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n26); break;
                case 26: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n27); break;
                case 27: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n28); break;
                case 28: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n29); break;
                case 29: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n30); break;
                case 30: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n31); break;
                case 31: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n32); break;
                case 32: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n33); break;
                case 33: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n34); break;
                case 34: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n35); break;
                case 35: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n36); break;
                case 36: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n37); break;
                case 37: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n38); break;
                case 38: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n39); break;
                case 39: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n40); break;
                case 40: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n41); break;
                case 41: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n42); break;
                case 42: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n43); break;
                case 43: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n44); break;
                case 44: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n45); break;
                case 45: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n46); break;
                case 46: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n47); break;
                case 47: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n48); break;
                case 48: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n49); break;
                case 49: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n50); break;
                case 50: myBg = BitmapFactory.decodeResource(getResources(),R.drawable.n51); break;
            }

            bgcycle++;
        }

        CercleEngine() 
        {   
            updateBG(); 
        }


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

        @Override
        public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) 
        {
            super.onOffsetsChanged(mxOffset, yOffset, xStep, yStep, xPixels, yPixels);
            mxOffset = xPixels;
            drawFrame();
        }



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

            Canvas c = null;
            try 
            {
                c = holder.lockCanvas();
                if (c != null) 
                {           

                    c.save();
                    c.translate((float) mxOffset, 0f);

                    if(myBg != null) {
                        updateBG();
                        c.drawBitmap(myBg, 0, 0, null);
                    }

                    c.restore();
                    //updateBG();
                    //c.drawBitmap(myBg, 0, 0, null);

                }
            }finally{
                if (c != null) holder.unlockCanvasAndPost(c);
            }
            handler.removeCallbacks(drawRunner);
        }
    }
}

1 ответ

Проблема в том, что вы каждый раз создаете растровое изображение в updateBG(). То есть сделать это вялым.

Другие вопросы по тегам