Android OnTouchListener不起作用

时间:2014-09-07 09:05:19

标签: java android android-activity view ontouchlistener

很简单。 OnTouchListener根本不起作用。

我相当肯定它正在被初始化。我使用自定义视图来绘制用户界面,并且像往常一样,我被Android的敏感API(双关语)所阻碍:

public class ViewInterface extends View implements OnTouchListener{

public ViewInterface(Context context){
    super(context);

    ...
}

public void update(){
    ...
}

@Override
public void onDraw(Canvas canvas){
    ...
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        keyboardEnabled = true;
        return true;
    case MotionEvent.ACTION_UP:
        keyboardEnabled = false;
        return true;
    default: break;
    }

    return false;
}

初始化主要活动中的视图的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    //setContentView(R.layout.activity_aidan);
    activity = this;

    viewInterface = new ViewInterface(this);
    setContentView(viewInterface);

    initializeSpeechRecognition();
    findMe();

    run.start();
}

我错过了什么?在触摸屏幕并按住它时,keyboardEnabled应该设置为true(它只是一个调试值) - 但它没有做任何事情。触摸事件似乎根本没有响应。

我尝试使用以下代码使用View中内置的onTouchEvent方法:

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        keyboardEnabled = true;
        return true;
    case MotionEvent.ACTION_UP:
        keyboardEnabled = false;
        return true;
    default: break;
    }

    return false;
}

然而,这也不起作用。触摸事件根本没有响应 - 点击屏幕并释放应该将keyboardEnabled设置为false - 它没有。

1 个答案:

答案 0 :(得分:3)

您应该覆盖onTouchEvent()类的View方法。

目前您只是实现OnTouchListener接口,该接口应与setOnTouchListener()方法结合使用。

例如:

@Override
public boolean onTouchEvent(MotionEvent event) {
    // do whatever
}

不要忘记在适当的地方拨打super

或者,您可以在代码中的某处调用setOnTouchListener(this);,但这似乎是多余的。