Kuwapp's Blog

Android と Flutter やってます

【Android】ActivityのonTouchEventが呼ばれない

次のActivityとレイアウトの組み合わせで試すとonTouchEventが呼ばれませんでした。

Activity
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {	
        Log.d("onTouchEvent","call"); 
        return super.onTouchEvent(event);
    }
}
レイアウト
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.testtouchevent.MainActivity" >

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</RelativeLayout>


どうやらListViewの下にはタッチイベントが通らないみたい?。
解決策としてはdispatchTouchEventを使用すること。
dispatchTouchEventはonTouchEventより早くコールされるようです。
ListViewのタッチイベントより先に呼ばれているっぽい

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
     Log.d("DispatchTouchEvent","call");
		
     return super.dispatchTouchEvent(ev);
}