火灾事件直到触及android

时间:2013-10-20 15:10:15

标签: android

只要用户触摸屏幕,我想动态增加一条线的宽度。我使用了以下代码: -

@Override
public boolean onTouch(View v, MotionEvent event) {

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        stopX++; 

    }
    return true;//EDITED (FORGOT TO PASTE THIS LINE)
}

我将线条从0到stopX,只要触摸屏幕,y轴就是常量。但是,我失败了。该行增加的宽度(根据需要)但是,只有在触摸屏幕时,线条的宽度才会增加,也就是说,当我触摸屏幕时,线条会增加1但是增长不会像我接触那样持续。我希望我能让你理解我的问题。任何帮助将不胜感激。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是因为当您触摸View时会触发MotionEvent.ACTION_DOWN一次。你需要它,例如在事件stopX中启动一个递增MotionEvent.ACTION_DOWN的循环,并在MotionEvent.ACTION_UP中将其停止。例如:

Thread t;

@Override
public boolean onTouch(View v, MotionEvent event) {

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
      t=new Thread(new Runnable(){
       @Override run(){
        while(true){
         try{
          stopX++;
          Thread.sleep(500);
         }catch(ThreadInterruptedException e){
          break;
         }
       }

    }
  });
         t.start(); 

     }
    return true;
  case MotionEvent.ACTION_UP:
    t.interrupt();
    return true;
}

答案 1 :(得分:0)

尝试做这样的事情(只需确保在需要的地方添加相关锁以保持m_Task安全)。 我还会考虑使用计时器运行任务,以防止一些忙碌的等待。

@Override
public boolean onTouch(View v, MotionEvent event) {

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        // Start an async task
        // Add a lock
        m_Task = new LineIncreamentTask(...);
        task.Start();    
    }
    case MotionEvent.ACTION_UP:
        // Cancel the task
        // Add a lock
        if (m_Task != null) m_Task.cancel();
    }
    return true;//EDITED (FORGOT TO PASTE THIS LINE)
}

private class LineIncreamentTask
{
     public void doInBackground(...)
     {
           // Increase the line width
           // Update the UI & whatever
     }

     public void onPostExecute(...)
     {
         if (!isCanceled())
         {
               // Add a lock
               // Consider using a timer to prevent busy waiting
               m_Task = new LineIncreamentTask(...);
               m_Task.start();
         }
     }
}