3

私の Android アプリでは、タッチ イベント (1 回のタップ) が次の画像に移動するのを待って、画面に複数の画像を順番に表示したいと考えています。ここで、これを行う1つの方法は次のとおりであることがわかりました。

public class LoadImage extends Activity {
    private Thread thread; //defined inside the activity

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_load_image);

        [get an image and create a bitmap from it]

        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageBitmap(bitmap);

        thread = new Thread() {
            @Override
            public void run() {
                try {
                    synchronized(this) {
                        wait(100000000); //large number
                    }
                }
                catch(InterruptedException ex) {                    
                }         
            }
        };
        thread.start();    
   }

    @Override
    public boolean onTouchEvent(MotionEvent evt) {
        if (evt.getAction() == MotionEvent.ACTION_DOWN) {
            synchronized (thread) {
                thread.notifyAll();
            }
        }
        return true;
    }
}

ただし、このコードは待機をスキップして、すぐに最後の画像にジャンプするように見えます。何が問題なのですか、および/またはこれを行うためのより良い方法はありますか?

4

1 に答える 1

3

デフォルトでは、Android のイベント リスナーは待機用です。遅延を提供する必要はありません。

onTouchEvent(...)ImageView にリスナーを設定し、最初のビットマップを表示するだけです。ImageView がタッチされると、次のビットマップなどを表示します。どの画像を表示するか (画像 1、2、3、4 など) を知るために、何回タッチされたかを数えるだけです。

例...

public class LoadImage extends Activity {

    int imageNumber = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load_image);

        //get an image and create a bitmap from it

        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageBitmap(bitmap);

   }

    @Override
    public boolean onTouchEvent(MotionEvent evt) {
        if (evt.getAction() == MotionEvent.ACTION_DOWN) {
            imageNumber++;
            switch (imageNumber) {
                case 2:
                    // show image 2
                    break;
                case 3:
                    // show image 3
                    break;
                ...
            }
            return true;
        }
        return false;
    }
}
于 2012-09-11T00:41:06.273 に答える