如何只在特定时间调用一个函数

时间:2014-02-13 22:40:35

标签: java android android-framelayout motionevent

我有一个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 这个函数,因为否则它会让我的应用程序滞后如何修改现有代码?

2 个答案:

答案 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()
}