只要用户触摸屏幕,我想动态增加一条线的宽度。我使用了以下代码: -
@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但是增长不会像我接触那样持续。我希望我能让你理解我的问题。任何帮助将不胜感激。提前感谢您的帮助。
答案 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();
}
}
}