1

私は立ち往生しています。フレームを使用してライブ壁紙を作成しようとしています。使用しているコードが機能していません。ライブ壁紙はフレームを介して移動しません。最後のフレームのみを表示します。フレーム内を移動するには、このコードをどうすればよいですか? 配列メソッドです。もしそうなら、このコードで画像の配列をどのように設定しますか?

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, image2, image3, image4, image5, image6, image7, image8, image9,image10,
        image11, image12, image13, image14, image15, image16, image17, image18, image19,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);
            }
        }
    }
}

これは私のコードの編集です。解決策ではありません....

 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 WallpaperSer extends WallpaperService {

int incrementer=0;
Bitmap bmps[]=new Bitmap[10];

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

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

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

class WallpaperSerEngine extends Engine 
{

    int res[]={R.drawable.and1,R.drawable.and2,R.drawable.and3,R.drawable.and4,R.drawable.and5,R.drawable.and6,R.drawable.and7,R.drawable.and8,R.drawable.and9,R.drawable.and10};
    WallpaperSerEngine() 
    {  
          for(int i=0;i<=10;i++)
              {
                    bmps[i]= BitmapFactory.decodeResource(getResources(),res[i]);                     
               }
    }
}

    private final Handler handler = new Handler();
     private final Runnable drawRunner = new Runnable() {
            @Override
            public void run() {

                  drawFrame();
                  handler.removeCallbacks(drawRunner);

                  handler.postDelayed(drawRunner, 200);
            }

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

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

                     c.drawBitmap(bmps[incrementer], 0, 0, null);

                    incrementer=(incrementer==10)?0 : incrementer+1; 
                }
            } finally 
            {
                if (c != null) holder.unlockCanvasAndPost(c);
            }
        }

        private SurfaceHolder getSurfaceHolder() {
            // TODO Auto-generated method stub
            return null;
        }
    }
4

1 に答える 1

3

Handler を登録し、いくつかのスレッドを利用する必要があります。

しかし、まず、このようにグローバル int を追加します。

int インクリメンタ = 0;

あなたのこの変更されたコードを見てください。

1)クラス内で、 WallpaperSerEngine次のような Handler を作成します。

 private final Handler handler = new Handler(); 

2)同様にクラス内にRunnableを追加し、あなたの,WallpaperSerEngineを呼び出します drawFrame()

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

              drawFrame();              
        }

    };

3) 以下の行を drawFrame() の一番下に追加して、フレームを描画するために特定の時間間隔でランナブルが呼び出されるようにします。

                handler.removeCallbacks(drawRunner);

        handler.postDelayed(drawRunner, 200); //delay milliseconds 200. Change it for your need.

4) drawFrame()メソッドを変更します。あなたはこのようにすることはできません。いくつかのビットマップ配列を利用する必要があります。これは重要です。Kindle は、以下の手順を明確に実行します。

5)ビットマップごとに変数を宣言する代わりに、ビットマップ配列に入れます。

Bitmap bmps[]=new Bitmap[10]; // assign its size based on your need. I just need 10 for demo.

6) Drawable リソースの int 配列を宣言します。

   int res[]={R.drawable.and1,R.drawable.and2,R.drawable.and3,R.drawable.and4,R.drawable.and5,R.drawable.and6,R.drawable.and7,R.drawable.and8,R.drawable.and9,R.drawable.and10};

7)このように変更しますWallpaperSerEngine()

WallpaperSerEngine() 
        {  
              for(int i=0;i<=10;i++)
                  {
                        bmps[i]= BitmapFactory.decodeResource(getResources(),res[i]);                     
                   }
        }

8)最後に、 drawFrame()を少し変更します。

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

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

                     c.drawBitmap(bmps[incrementer], 0, 0, null);

                    incrementer=(incrementer==10)?0 : incrementer+1; 
                }
            } finally 
            {
                if (c != null) holder.unlockCanvasAndPost(c);
            }
        }
    }

それでおしまい。フレームが表示されているはずです。これが役立つ場合は、それを受け入れます。

于 2012-05-21T04:53:23.420 に答える