2014-02-10 100 views
0

我想我的ImageButton图片在最后点击后经过一段时间后才能更改。最后一次按钮点击后的延迟动作

ImageButton b = ... 
b.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    b.removeCallbacks(null); 
    b.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
     b.setImageResource(android.R.drawable.ic_delete); 
     } 
    }, 1500); 
    } 
}); 

此代码不起作用。删除回调的行返回true,但不会删除任何回调。如果我再次点击按钮,它会在第一次点击1.5秒后改变图像。

回答

1

试试这个吗?

public void onClick(View v) { 
    b.removeCallbacks(clickRunnable); 
    b.postDelayed(clickRunnable, 1500); 
    } 


    Runnable clickRunnable = new Runnable() { 
     @Override 
     public void run() { 
     b.setImageResource(android.R.drawable.ic_delete); 
     } 
    }; 
0

removeCallbacks方法删除(取消执行)以前发布的runnable。你必须把相同的(Runnable接口)对象的removeCallbacks参数,如果你想停止执行:

_myRunnable = new Runnable() {...}; 
... 
b.removeCallbacks(_myRunnable); 
b.postDelayed(myRunnable, 1500); 
0

这样可以很清楚:

定义处理程序,并运行的私人领域。这将使他们的可重复使用的所有按钮点击

onClick()
private Handler mHandler = new Handler(); 
private Runnable mClickRunnable = new Runnable() { 
     @Override 
     public void run() { 
     mInmageView.setImageResource(android.R.drawable.ic_delete); 
     } 
    }; 

mHandler.removeCallbacks(mClickRunnable); 
mHandler.postDelayed(mClickRunnable, 1500); 

第一行删除以前的回调(我们不需要它们了)

第二行开始新的回调

相关问题