我有一个 EditText
和一个 FrameLayout
。我这样做的方式是,如果用户在 FrameLayout 内拖动,背景会根据 (X,Y) 坐标中的像素更改颜色 (RGB),并使用从 RGB 值转换的十六进制值更新 EditText。
这是我的整个代码的 Pastebin 链接: http://pastebin.com/7P3QSmb4
我遇到的问题是以下代码:
if (s.length() == 6) {
int color = Integer.parseInt(etHexVal.getText().toString(), 16);
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = (color >> 0) & 0xFF;
getXY(r, g, b);
hexToRGB();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(etHexVal.getWindowToken(), 0);
}
我想在 EditText
的文本发生更改时调用函数 getXY(r, g, b)
仅不要在 FrameLayout
内拖动,否则会使我的应用程序滞后。 如何修改现有代码?
最佳答案
使用变量锁定 getXY() 的调用
声明一个新变量
Boolean callGetXY = true;
在 ACTION_DOWN 时将其设置为 false,在 ACTION_UP 时将其恢复为 true
View.OnTouchListener flTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// your current content of the method here
// ...
if (event.getAction() == MotionEvent.ACTION_DOWN) {
callGetXY = false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
callGetXY = true;
}
}
};
将第 82 行更改为:
if (callGetXY) {
getXY()
}
关于java - 如何仅在特定时间调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767103/