Android 使用谷歌地图API进行缩放时禁用滚动
当我尝试平移谷歌地图时,CoordinatorLayout会向下滚动,当然我想平移地图。 如果我在地图外按住鼠标,然后尝试平移,那么效果会很好,但这不是一个很好的最终用户体验 OnTouchListener修复了部分问题。。。但前提是我水平平移。当我的手指向上或向下移动时,它停止平移地图。 我怎样才能解决这个问题Android 使用谷歌地图API进行缩放时禁用滚动,android,google-maps,scrollview,coordinator-layout,Android,Google Maps,Scrollview,Coordinator Layout,当我尝试平移谷歌地图时,CoordinatorLayout会向下滚动,当然我想平移地图。 如果我在地图外按住鼠标,然后尝试平移,那么效果会很好,但这不是一个很好的最终用户体验 OnTouchListener修复了部分问题。。。但前提是我水平平移。当我的手指向上或向下移动时,它停止平移地图。 我怎样才能解决这个问题 public class HomeFragment extends Fragment { private TextView aboutTxt; private SupportMapF
public class HomeFragment extends Fragment {
private TextView aboutTxt;
private SupportMapFragment mSupportMapFragment;
private GoogleMap mMap;
public HomeFragment() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static HomeFragment newInstance() {
HomeFragment fragment = new HomeFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
Log.e(TAG,"Down");
return true;
}
if (event.getAction()==MotionEvent.ACTION_MOVE){
Log.e(TAG,"Move");
return true;
}
if (event.getAction()==MotionEvent.ACTION_UP){
Log.e(TAG,"Up");
return true;
}
return false;
}
});
mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
if (mSupportMapFragment == null) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mSupportMapFragment = SupportMapFragment.newInstance();
fragmentTransaction.replace(R.id.map, mSupportMapFragment).commit();
}
if (mSupportMapFragment != null) {
mSupportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
if (googleMap != null) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// Add a marker in Sydney and move the camera
LatLng myMap = new LatLng(xx.xxxx, xx.xxxx);
mMap.addMarker(new MarkerOptions().position(gradiMap).title("My marker));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myMap, 17));
}
}
});
}
XML
我想您正在寻找
OnInterceptTouchEvent
。您可以在CoordinatorLayout
上设置它,并能够确定它是应该使用事件本身,还是将其传递给它的子视图
您需要扩展协调布局
并覆盖onInterceptTouchEvent(MotionEvent事件)
,然后执行以下操作:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return false;
break;
case MotionEvent.ACTION_MOVE:
return false;
break;
default:
return true;
break;
}
}
我想您正在寻找InterceptTouchEvent上的
。您可以在CoordinatorLayout
上设置它,并能够确定它是应该使用事件本身,还是将其传递给它的子视图
您需要扩展协调布局
并覆盖onInterceptTouchEvent(MotionEvent事件)
,然后执行以下操作:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return false;
break;
case MotionEvent.ACTION_MOVE:
return false;
break;
default:
return true;
break;
}
}
找到了答案
如前所述,只需创建一个自定义类并使用它即可
public class CustomScrollView extends ScrollView {
public CustomScrollView(Context context) {
super(context);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
//Log.i("CustomScrollView", "onInterceptTouchEvent: DOWN super false" );
super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_MOVE:
return false; // redirect MotionEvents to ourself
case MotionEvent.ACTION_CANCEL:
// Log.i("CustomScrollView", "onInterceptTouchEvent: CANCEL super false" );
super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_UP:
//Log.i("CustomScrollView", "onInterceptTouchEvent: UP super false" );
return false;
default:
//Log.i("CustomScrollView", "onInterceptTouchEvent: " + action );
break;
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
super.onTouchEvent(ev);
//Log.i("CustomScrollView", "onTouchEvent. action: " + ev.getAction() );
return true;
}
}
XML:
找到了答案
如前所述,只需创建一个自定义类并使用它即可
public class CustomScrollView extends ScrollView {
public CustomScrollView(Context context) {
super(context);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
//Log.i("CustomScrollView", "onInterceptTouchEvent: DOWN super false" );
super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_MOVE:
return false; // redirect MotionEvents to ourself
case MotionEvent.ACTION_CANCEL:
// Log.i("CustomScrollView", "onInterceptTouchEvent: CANCEL super false" );
super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_UP:
//Log.i("CustomScrollView", "onInterceptTouchEvent: UP super false" );
return false;
default:
//Log.i("CustomScrollView", "onInterceptTouchEvent: " + action );
break;
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
super.onTouchEvent(ev);
//Log.i("CustomScrollView", "onTouchEvent. action: " + ev.getAction() );
return true;
}
}
XML:
您能再解释一下吗?我仍然无法让它在这样的情况下工作,我做的第一件事就是看看我的截获是否有任何作用。将您的onInterceptTouchEvent
方法更改为每次都返回true,并查看是否有任何触摸正在进入地图。或者你可以在开关上设置一个断点,看看它是否被击中。谢谢你给我指明了正确的方向。问题解决了。你能再解释一下吗?我仍然无法让它在这样的情况下工作,我做的第一件事就是看看我的截获是否有任何作用。将您的onInterceptTouchEvent
方法更改为每次都返回true,并查看是否有任何触摸正在进入地图。或者你可以在开关上设置一个断点,看看它是否被击中。谢谢你给我指明了正确的方向。问题解决了。