2017-01-17 4 views
1

부모로 NestedScrollView, 하위에 googleMap을 포함하는 조각이 있습니다. 내가 아래쪽 또는 위쪽으로지도에서 스크롤하면 NesetdScrollView가 스크롤되고지도 내부를 스크롤 할 수 없습니다. 지금까지 투명 이미지를 생성하여 스택 오버 플로우로부터 솔루션을 시도했지만 나에게 도움이되지 못했습니다.Google지도 NestedScrollView 내에서 조각 스크롤

XML :

<android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/car_progress" 
     android:id="@+id/nested_scroll" 
     android:visibility="gone" 

     > 
............ 
............ 
<RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/first_section" 
       android:visibility="gone" 
       android:id="@+id/map_wrapper" 
       android:orientation="vertical" 
       android:layout_marginTop="10dp" 
       > 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/dealer_location" 
        android:textAllCaps="true" 
        android:textColor="@color/colorPrimary" 
        style="@style/BoldStyle" 
        android:layout_marginLeft="@dimen/single_title_dimen" 
        android:layout_marginRight="@dimen/single_title_dimen" 
        android:id="@+id/dealer_head" 

        /> 

       <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="match_parent" 
        android:layout_height="200dp" 
        android:id="@+id/map" 
        android:name="com.google.android.gms.maps.SupportMapFragment" 
        android:layout_below="@+id/dealer_head" 
        /> 
       <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/imagetrans" 
        android:layout_alignTop="@+id/map" 
        android:layout_alignBottom="@+id/map" 
        android:layout_alignEnd="@+id/map" 
        android:layout_alignRight="@+id/map" 
        android:layout_alignLeft="@+id/map" 
        android:layout_alignStart="@+id/map" 
        android:src="@android:color/transparent"/> 

      </RelativeLayout> 
..... 
..... 
</android.support.v4.widget.NestedScrollView> 

코드 :

transImg.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int action = event.getAction(); 
       switch (action) { 
        case MotionEvent.ACTION_DOWN: 
         // Disallow ScrollView to intercept touch events. 
         nv.requestDisallowInterceptTouchEvent(true); 
         // Disable touch on transparent view 
         return false; 

        case MotionEvent.ACTION_UP: 
         // Allow ScrollView to intercept touch events. 
         nv.requestDisallowInterceptTouchEvent(false); 
         return true; 

        case MotionEvent.ACTION_MOVE: 
         nv.requestDisallowInterceptTouchEvent(true); 
         return false; 

        default: 
         return true; 
       } 
      } 
     }); 

답변

9

가 ...이 시도 만질 래퍼이 사용자 지정지도 조각을 사용합니다.

MySupportMapFragment mSupportMapFragment; 
mSupportMapFragment = (MySupportMapFragment) getChildFragmentManager().findFragmentById(R.id.googleMap); 
if(mSupportMapFragment != null) 
     mSupportMapFragment.setListener(new MySupportMapFragment.OnTouchListener() { 
     @Override 
     public void onTouch() { 
      scrollView.requestDisallowInterceptTouchEvent(true); 
     } 
    }); 

MySupportMapFragment

public class MySupportMapFragment extends SupportMapFragment { 

    private OnTouchListener mListener; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 

     View layout = super.onCreateView(inflater, parent, savedInstanceState); 

     TouchableWrapper frameLayout = new TouchableWrapper(getActivity()); 
     frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
     ((ViewGroup) layout).addView(frameLayout, 
       new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 

     return layout; 
    } 

    public void setListener(OnTouchListener listener) { 
     mListener = listener; 
    } 

    public interface OnTouchListener { 
     public abstract void onTouch(); 
    } 

    public class TouchableWrapper extends FrameLayout { 

     public TouchableWrapper(Context context) { 
      super(context); 
     } 

     @Override 
     public boolean dispatchTouchEvent(MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        mListener.onTouch(); 
        break; 
       case MotionEvent.ACTION_UP: 
        mListener.onTouch(); 
        break; 
      } 
      return super.dispatchTouchEvent(event); 
     } 
    } 
} 
+0

나는 활동에서 getChildFragmentManager을()에 액세스 할 수 없습니다. –

+0

getChildFragmentManager()는 다른 프래그먼트 안에있는 프래그먼트에 액세스하려는 경우에만 사용됩니다. 어떤 액티비티 내에서 프래그먼트에 액세스하려면 getSupportFragmentManager() –

+0

감사합니다 @AshishJohn을 사용합니다.이 기능은 완벽하게 작동했습니다. –