Activity上的OnTouchListener永远不会调用

时间:2011-07-06 04:49:22

标签: android

我使用了这段代码,但是当我在运行时点击活动时,它永远不会在OnTouch()方法中出现。有人可以指导我做错了吗?我是否需要设置此活动的内容?实际上我想要用户在执行期间触摸的活动坐标。

public class TouchTestAppActivity extends Activity implements OnTouchListener 
{ 

    @Override
 public void onCreate(Bundle savedInstanceState) 
       { 
       super.onCreate(savedInstanceState); 
       //setContentView(R.layout.touch); 
       } 

    @Override
 public boolean onTouch(View arg0, MotionEvent arg1) 
       { 
        // TODO Auto-generated method stub 
        String test = "hello";  
       } 
} 

4 个答案:

答案 0 :(得分:12)

更新:

你需要这样做:

  • 在XML布局文件中,您需要根视图的ID:android:id="@+id/myView"
  • 在你的onCreate()方法中,写下:

    LinearView v= (LinearView) findViewById(R.id.myView);
    v.setOnTouchListener(this);
    

假设您的根视图是LinearView

答案 1 :(得分:2)

你应该将onTouchListener发送到相关的GUI组件。

例如:

   public void onCreate(Bundle savedInstanceState) 
   { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.touch); 
       TextView someView = (TextView)findViewById(R.id.some_view_from_layout_xml);
       someView.setOnTouchListener(this); // "this" is the activity which is also OnTouchListener
   } 

答案 2 :(得分:2)

您必须使用setOnTouchListener()添加侦听器,否则将调用您的onTouch方法。任何监听器都适用于任何视图。所以你必须将监听器添加到视图中,例如button.setOnTouchListener(this);

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.yourxml, null);
setCOntentView(vi);
vi.setOnTouchListener(this);

答案 3 :(得分:1)

在onCreate中,您需要设置内容视图(只是取消注释第二行应该可以工作),然后您需要将OnTouchListener(您的活动)设置为应用程序中视图的onTouchListener。

假设您的布局中有一个名为“MainView”的视图;它看起来像这样:

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      View view = findViewById(R.id.MainView);
      view.setOnTouchListener(this);
   }

这篇文章有一个很好的例子: http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-2-building-the-touch-example/1763