2

当我将侦听器“OnTouchListener”添加到视图时,它不会注册。这是我的代码:

GUI gui;
boolean guis = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    gui = new GUI(getBaseContext());
    gui.setOnTouchListener(this);
    setContentView(gui);
}

当我执行 setOnTouchListener() 时,我将“this”作为参数。那应该是别的吗?

我让 GUI 类实现 OnTouchListener 并添加一个 OnTouch 方法......但我把

Log.w("AA","Hello")

在 OnTouch 方法中,它根本不记录。

4

1 回答 1

4

您可以执行以下操作

  public class MainActivity extends Activity implements OnTouchListener{
    GUI gui;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        gui = new GUI(MainActivity.this);
            setContentView(gui);
    gui.setOnTouchListener(this);
}


@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    Log.w("AA","Hello")
    return true;
}

或者您可以在您的 gui 视图中覆盖 onTouch

public class GUI extends View{

Context mcontext; 
public MyView(Context context) {
    super(context);
            mcontext=context; 
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(mcontext, "View clicked", 1000).show();
switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        // do something
        break;
    case MotionEvent.ACTION_MOVE:
        // do something
        break;
    case MotionEvent.ACTION_UP:
       //do something
        break;
}
return true;
}

正如 Luksprog 评论的那样,这指的是当前的上下文。

如果你这样做 gui.setOnTouchListener(this);

您的活动类必须实现 OnTouchListener 并覆盖 onTouch 方法。

您还可以在自定义视图中覆盖 onTouch。

如果您只是覆盖 onTouch,则无需在您的 GUI 自定义视图类中实现 OnTouchListener。

于 2013-05-12T10:29:43.693 回答