In Android, touch events pop up from child to parent, as you would expect. However, the parent can intercept all touch events destined for one of its children and decide to veto sending this event to the child. This is exactly what you want, if I understand correctly that your touch event should be triggered no matter what happens when you touch your map view, and then you send the touch event to the list of your children, if necessary.
To capture the touch event from CardView, you must create a custom view that subclasses it and overrides the onInterceptTouchEvent method:
package com.pranapps.testontouch; import android.content.Context; import android.util.AttributeSet; import android.support.v7.widget.CardView; import android.view.MotionEvent; import android.view.View; public class CardViewTouchThief extends CardView { public CardViewTouchThief(Context context) { super(context); } public CardViewTouchThief(Context context, AttributeSet attrs) { super(context, attrs); } public CardViewTouchThief(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return true; } }
Then you use CardViewTouchThief, where you usually use CardView in an XML layout:
<com.pranapps.testontouch.CardViewTouchThief xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/mycardview" card_view:cardUseCompatPadding="true"> <ListView android:layout_width="match_parent" android:layout_height="fill_parent" android:id="@+id/myListView" android:dividerHeight="0.2dp" android:overScrollMode="always" android:smoothScrollbar="true" android:groupIndicator="@null"/> </com.pranapps.testontouch.CardViewTouchThief>
And in your activity, use your own logic for processing whenever you want the touch event to be sent to the list view.
mycardview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.d("MainActivity", "TOuchedddd"); if(mylistview!=null){
Here is the fixed source code of the project.
Gomino May 12 '16 at 12:49 a.m. 2016-05-12 00:49
source share