代码之家  ›  专栏  ›  技术社区  ›  Oscar-Sonny

当视图处于布局中时,onTouchEvent不起作用

  •  0
  • Oscar-Sonny  · 技术社区  · 10 年前

    我已经创建了一个MapView类,它绘制了一些表示地图的圆和线,在那里你可以触摸一个圆来改变它的颜色。如果它正常工作,但当我将视图添加到布局时,touchlistener不会返回任何触摸。

    这是我的MainActivity.java

    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.*;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.RelativeLayout;
    
    public class MainActivity extends Activity {
    
    MapView mapView;
    RelativeLayout mainLayout;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mainLayout = new RelativeLayout(this);
        mapView = new MapView(this);
        mapView.findViewById(R.id.theMap2);
        mapView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    float x = event.getX();
                    float y = event.getY();
                    System.out.println("Touch! X: " + x + ", Y: " + y);
                    mapView.touched(x, y);
                    return true;
                }
                return true;
            }
        });
    
        setContentView(R.layout.activity_main2);
    }
    

    通过执行以下操作,我可以看到mapView的工作原理: setContentView(mapView);

    这里是activity_main2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <bus.com.ece602_bus.MapView
            android:id="@+id/theMap2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    我做错了什么?为什么触摸未注册?

    1 回复  |  直到 10 年前
        1
  •  1
  •   StenSoft    10 年前

    setContentView(R.layout.activity_main2); 使用新实例创建新布局 MapView 而不是你设置的听众。