goo*_*oid 6 android google-maps android-layout google-play-services android-maps-v2
像这样在xml中膨胀我的Mapview
<android.support.v4.widget.NestedScrollView
android:id="@+id/sv_offers"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="56dp"
android:visibility="gone"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.xys.widgets.CustomMapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="125dp"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
我已经实现了自定义Mapview如下: -
public class CustomMapView extends MapView {
private ViewParent mViewParent;
public CustomMapView(Context context) {
super(context);
}
public CustomMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setViewParent(@Nullable final ViewParent viewParent) { //any ViewGroup
mViewParent = viewParent;
}
public CustomMapView(Context context, GoogleMapOptions options) {
super(context, options);
}
@Override
public boolean onInterceptTouchEvent(final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (null == mViewParent) {
getParent().requestDisallowInterceptTouchEvent(true);
Timber.d("Inside if of action down");
} else {
mViewParent.requestDisallowInterceptTouchEvent(true);
Timber.d("Inside else of action down");
}
break;
case MotionEvent.ACTION_UP:
if (null == mViewParent) {
getParent().requestDisallowInterceptTouchEvent(false);
Timber.d("Inside if of action up");
} else {
mViewParent.requestDisallowInterceptTouchEvent(false);
Timber.d("Inside else of action up");
}
break;
default:
break;
}
return super.onInterceptTouchEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
并在我的Activity的onCreate()中使用了mapview
mapView = (CustomMapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
GoogleMap googleMap = mapView.getMap();
googleMap.setMyLocationEnabled(false);
googleMap.getUiSettings().setMyLocationButtonEnabled(false);
googleMap.getUiSettings().setCompassEnabled(false);
googleMap.getUiSettings().setAllGesturesEnabled(false);
mapView.setViewParent(nestedScrollContainer);
Run Code Online (Sandbox Code Playgroud)
哪里nestedScrollContainer
是我的嵌套scrollView.Tried在SO提供了许多解决办法,但不能似乎得到了解决方法滚动issue.Help将不胜感激!谢谢
在你的代码MapView
里面的NestedScrollView--> LinearLayout--> com.xys.widgets.CustomMapView
两级层次结构.
因此,在您的情况下,您可以访问NestedScrollView,如下所示
getParent().getParent().requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)
改变这一行
getParent().requestDisallowInterceptTouchEvent(true);
本
getParent().getParent().requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)
以下是您的案例的完整代码
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.xys.widgets.CustomMapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="125dp"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
`
public class CustomMapView extends MapView {
private ViewParent mViewParent;
public CustomMapView(Context context) {
super(context);
}
public CustomMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setViewParent(@Nullable final ViewParent viewParent) { //any ViewGroup
mViewParent = viewParent;
}
public CustomMapView(Context context, GoogleMapOptions options) {
super(context, options);
}
@Override
public boolean onInterceptTouchEvent(final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().getParent().requestDisallowInterceptTouchEvent(true);
Timber.d("Inside if of action down");
break;
case MotionEvent.ACTION_UP:
getParent().getParent().requestDisallowInterceptTouchEvent(false);
Timber.d("Inside if of action up");
break;
default:
break;
}
return super.onInterceptTouchEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2088 次 |
最近记录: |