【问题标题】:Android OnTouchListener Does Not WorkAndroid OnTouchListener 不起作用
【发布时间】:2014-09-07 09:05:19
【问题描述】:

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

我相当肯定它正在初始化。我正在使用自定义视图来绘制我的 UI,并且像往常一样,我受到了 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;
}

在主Activity中初始化视图的代码:

@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 - 它没有。

【问题讨论】:

    标签: java android android-activity view ontouchlistener


    【解决方案1】:

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

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

    例如:

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

    别忘了在适当的时候致电super

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

    【讨论】:

    • 我把onTouch方法改成了onTouchEvent,还是没有响应。
    • 我很抱歉 - 我用 Eclipse 清理了项目,它解决了这个问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多