Java 如何仅在特定时间调用函数
我有一个Java 如何仅在特定时间调用函数,java,android,android-framelayout,motionevent,Java,Android,Android Framelayout,Motionevent,我有一个EditText和一个FrameLayout。如果用户在FrameLayout中拖动,背景会根据(X,Y)坐标中的像素更改颜色(RGB),并使用从RGB值转换的十六进制值更新EditText 这是我的整个代码的粘贴库链接: 我遇到的问题是以下代码: if (s.length() == 6) { int color = Integer.parseInt(etHexVal.getText().toString(), 16); int r = (color >> 1
EditText
和一个FrameLayout
。如果用户在FrameLayout中拖动,背景会根据(X,Y)坐标中的像素更改颜色(RGB),并使用从RGB值转换的十六进制值更新EditText
这是我的整个代码的粘贴库链接:
我遇到的问题是以下代码:
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);
}
我想调用函数
getXY(r,g,b)
仅当EditText
的文本发生更改并且我没有在FrameLayout
中拖动时,因为否则会使我的应用程序滞后如何修改现有代码?您可以创建TextWatcher对象,并使用EditText.addTextChangedListener(TextWatcher watcher)将其添加到EditText对象中。这将导致EditText对象在文本更改时调用TextWatcher的方法。您可以从TextWatcher中实现的PostTextChanged方法调用getXY。这样,仅当EditText对象中的文本更改时才会调用它
资料来源:
Boolean callGetXY = true;
在动作(u)向下时设置为false,在动作(u)向上时设置为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()
}
所以你得到了多次相同值的调用?为什么不在代码中做一个检查来设置值,以确保没有将相同的值写入editText?ie:if(!newHexValue.equals(etHexVal.getText().toString())然后是setText。这将阻止您进行不必要的处理。只有当文本在内部发生更改时才应调用该函数,但FrameLayout MotionEvent也会调用TextWatcher函数。如果查看pastebin代码,您会更好地理解。我只包含了部分代码,但在包含完整代码的pastebin中,我使用的是TextWatchr、 唯一的问题是每次我在布局中移动时发生的文本更改都会调用getXY。因此,当我拖动函数时,它试图设置X,Y,这就是我的应用程序导致ANR的原因。我实际上是在试图阻止
getXY()
在FrameLayout中拖动时被调用。我只想在更改EditText值和不拖动时调用它。我实际上为每个…ACTION\u MOVE和ACTION\u DOWN添加了一个布尔值,isDrag=true;
ACTION\u UPisDrag=false;
并且在TextWatcher函数中添加了Toast.makeText(getApplicationContext(),String.valueOf(isDrag),2000).show();if(isDrag==false){getXY(r,g,b);}
如果我不拖拽并且isDrag为false,它将触发。出于某种原因,isDrag等于true而不是false;当我正确理解你的问题时,我有相同的想法。不,这不起作用。出于某种原因,callGetXY
为false;出于某种原因。如果你需要,我可以向你发送我的应用程序包:)刚刚注意到一个问题。当我放弃这个视图时,它将是真的,并导致它自己调用getXY:/该死……不工作。