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

Ну привет всем. Это мой первый андроид проект. Я пытаюсь создать живые обои с последовательностью изображений, полученных из видео. Размеры каждого изображения 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);
        }
    }
}

person FrankieWar    schedule 25.06.2012    source источник
comment
Вы не используете правильный отступ?   -  person Chris Dennett    schedule 25.06.2012
comment
К ОП: помните, что другие люди будут читать ваш код, и если он будет неправильно отформатирован, ваш вопрос не получит должного внимания и будет проигнорирован!   -  person t0mm13b    schedule 25.06.2012
comment
В результате пришлось переформатировать...   -  person t0mm13b    schedule 25.06.2012


Ответы (1)


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

person Ravi Bhojani    schedule 26.06.2012