【问题标题】:Java Android:Add array 15times in one second How?Java Android:在一秒钟内添加数组15次如何?
【发布时间】:2014-07-02 13:04:17
【问题描述】:

我想在一秒钟内添加 15 次数组。我使用过 Timer、Countdowntimer、handler,但不适用于 Button Action.Down 和 Action.Move。有什么帮助吗?

ArrayList<Integer> Xpos;
ArrayList<Integer> Ypos;
ArrayList<String> MarkerSelected;
private Handler handlerXYPos = new Handler();
Runnable runnableXYPos = null;



case MotionEvent.ACTION_DOWN:
handlerXYPos.post(runnableXYPos);   
break;

case MotionEvent.ACTION_UP:
handlerXYPos.removeCallbacks(runnableXYPos);
break;


//=== case drag
case MotionEvent.ACTION_MOVE:
handlerXYPos.post(runnableXYPos);
break;

这个runnable执行15帧

runnableXYPos = new Runnable() {  

                @Override  
                public void run() 
                {  

                     Xpos.add(xP);
                     Ypos.add(yP);
                     MarkerSelected.add(MarkerName);
                     handlerXYPos.postDelayed(runnableXYPos, 66);  //convert 15 in milisec = 66


                }  
            };

当我按下按钮时,此代码有效,有时会添加正确数量的值,但当我拖动手指时,它会添加额外的值。

【问题讨论】:

  • 在每个 Motion 事件案例中添加日志,您将了解它是如何工作的。

标签: java android arraylist handler


【解决方案1】:

当你拖动以下事情发生时

1) MotionEvent.ACTION_DOWN called once when you press to start drag

2) MotionEvent.ACTION_MOVE is called several times depending on your drag

3) MotionEvent.ACTION_UP: will get called once when you release to finish drag

因此无需在 MotionEvent.ACTION_MOVE 中编写代码

【讨论】:

    【解决方案2】:

    我不确定这是否是解决方案,但请尽量不要在行动中采取行动:

        case MotionEvent.ACTION_MOVE:    
             // handlerXYPos.post(runnableXYPos);      
            break;    
    

    【讨论】:

    • 对,但是当我释放按钮时,ActionUp 会删除此处理程序。这样可以节省非常少的数据。
    • 不要删除 action_up 中的回调。需要时删除回调中的回调。
    • 你能告诉我如何在回调中删除它吗??
    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2017-03-14
    • 2015-09-28
    • 2019-01-05
    • 2015-04-18
    • 2020-12-07
    • 2011-03-17
    相关资源
    最近更新 更多