我有一个EditText
和一个FrameLayout
。我以某种方式制作它,如果用户在FrameLayout中拖动,背景会根据(X,Y)坐标中的像素更改颜色(RGB),并且还会使用从RGB值转换的Hex值更新EditText。 / p>
以下是我的整个代码的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);
}
我希望在getXY(r, g, b)
的文字发生更改且我没有在EditText
内拖动时调用FrameLayout
这个函数,因为否则它会让我的应用程序滞后如何修改现有代码?
答案 0 :(得分:1)
您可以使用EditText.addTextChangedListener(TextWatcher观察器)创建TextWatcher对象并将其添加到EditText对象。这将导致EditText对象调用TextWatcher的方法,以便在文本更改时调用。您可以从TextWatcher中实现的afterTextChanged方法调用getXY。这样,只有在EditText对象中的文本发生更改时才会调用它。
来源:答案 1 :(得分:1)
使用变量锁定调用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()
}