安卓 - 等待触摸事件

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;
    }
}

然而,这段代码似乎只是跳过等待并立即跳到最后一张图片。有什么问题,或者有更好的方法吗?
1个回答

3

默认情况下,在Android中,事件监听器是用于等待 - 您不必提供任何延迟。

只需在ImageView上设置onTouchEvent(...)监听器并显示第一个位图。当触摸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;
    }
}

很棒的想法,完美运作!由于我的图像来自OpenCV处理,并且不会全部在开始时可用,我向类中添加了一个私有布尔标志readyToDisplay。在所有操作完成后,我将其设置为true。然后,您的代码变为:if (readyToDisplay && evt.getAction() == MotionEvent.ACTION_DOWN) { - 1''

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接