我有一個應用程序,我需要在ImageButton每次觸摸後有一個延遲。OnTouch延遲(Android)
我試過Thread.sleep()方法,但我不確定這是否是處理它的最好方法。
你們推薦什麼?
任何幫助被讚賞!
還有一件事:我想讓onTouch()事件的內容被觸發,那麼我想延遲下一個onTouch()事件的「X」秒。這就像阻止用戶在按鈕中點擊過多次。
我有一個應用程序,我需要在ImageButton每次觸摸後有一個延遲。OnTouch延遲(Android)
我試過Thread.sleep()方法,但我不確定這是否是處理它的最好方法。
你們推薦什麼?
任何幫助被讚賞!
還有一件事:我想讓onTouch()事件的內容被觸發,那麼我想延遲下一個onTouch()事件的「X」秒。這就像阻止用戶在按鈕中點擊過多次。
因爲所有的觸摸事件都是由UI線程處理的,所以Thread.sleep()
會阻塞你的UI線程,這是我希望不是你要找的東西。 我想爲您解決問題的最正確的方法是使用你的onClick
處理postDelayed(Runnable, long)
接口,使您的延後執行:
@Override
public void onClick(View v)
{
postDelayed(new Runnable()
{
@Override
public void run()
{
// do your stuff here
}
}, 10000); //10sec delay
}
UPDATE:
如果希望用戶防止點擊過快上你的形象的看法,我強烈建議您onClick
而非onTouch
去(除非有嚴重的原因)
但是,請查看代碼片斷這可能會幫助您:
private boolean blocked = false;
private Handler handler = new Handler();
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
if (!blocked)
{
blocked = true;
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
blocked = false;
}
}, 1000);
} else
{
return false;
}
}
return super.onTouchEvent(event);
}
謝謝你的回答帕維爾杜德卡。我正在使用onTouch()事件...是否也可以將您的解決方案與onTouch()一起使用? –
當然,但是正如你所知,onTouch在每次用戶交互時不會被調用一次,所以你可能需要引入一些標誌來運行你的延遲的東西一次,或者檢查運動事件的類型(例如,只對'ACTION_DOWN'事件作出反應,取決於在你的需求基本上... –
再次感謝你的答覆。我正在使用ACTION_DOWN事件,以確保我得到它只是一次。我試圖使用你的代碼,但編譯器說我需要創建方法postDelayed並且我必須將onTouch()事件的arg1聲明爲final。我該如何解決這個問題? –
也許更多關於你正在嘗試做什麼......你是否試圖在延遲後發生事件?那麼'Handler.postDelayed()'可能是正確的解決方案 – JRaymond
JRaymond,你可以發佈一些示例代碼嗎?我是一個noob! =) –
我會的,但帕維爾的回答幾乎正是我告訴你要做:) – JRaymond