首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户触摸屏幕时调用的事件?

当用户触摸屏幕时调用的事件?
EN

Stack Overflow用户
提问于 2015-01-25 12:19:33
回答 2查看 137关注 0票数 0

欢迎大家

我正在开发一个游戏。我希望当用户接触屏幕时,必须每100毫秒不断地发射激光,从屏幕底部到x,y坐标,直到用户停止触摸屏幕为止。我有激光工作,但现在我需要不断地发射它每100毫秒。

我希望写onTouch事件,问题是我不知道如何实现我的需求。如果用户触摸屏幕,我想每100毫秒发射一台激光。

如果我将激光动画放在onTouch MotionEvent.ACTION_MOVE事件中,那么只有手指被移动时,激光才会被抛出。但我希望激光每100毫秒一次,而不移动手指。

另外,当用户触摸屏幕时,MotionEvent.ACTION_DOWN不能工作,因为它只被调用一次,但只有一次。

怎样才能满足我的需要?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-25 12:38:53

没有一种简单的方法可以让你的活动每100毫秒举行一次

但你可以这么做:

代码语言:javascript
复制
        class TouchStarted {
        AtomicBoolean actionDownFlag = new AtomicBoolean(true);

        Thread loggingThread = new Thread(new Runnable(){

            public void run(){
                while(actionDownFlag.get()){
                    Log.d("event", "Touching Down");
                    try {
                       Thread.sleep(100, 0);
                    } catch (InterruptedException e) {
                    }
                    //maybe sleep some times to not polute your logcat
                }
                Log.d("event", "Not Touching");
            }
        });

        public void stop() {
            actionDownFlag.set(false);
        }

        public void start() {
            actionDownFlag.set(true);
            loggingThread.start();
        }

    }

    TouchStarted last = null;

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if(event.getAction()==MotionEvent.ACTION_DOWN){
            if(last != null) last.stop();
            last = new TouchStarted();
            last.start();
        }
        if(event.getAction()==MotionEvent.ACTION_UP){
            last.stop();
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2015-01-25 12:40:13

您可以在您的ACTION_DOWN中尝试这样的方法

代码语言:javascript
复制
Thread thread = new Thread(new Runnable){
    @Override
    public void run(){
        while(yourFlag) //figure out something to set up a loop 
          try{ 

            yourfirelasermethod();  
            Thread.sleep(100);     // this waits 100ms until firing             
                                   // again
         }catch(Exception e){

         }
    }
}).start();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28136294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档