3

在我的 Android 应用程序中,我想在屏幕上依次显示多张图像,等待触摸事件(单击)转到下一个。我在这里看到这样做的一种方法应该是:

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 回答