Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用谷歌地图API进行缩放时禁用滚动_Android_Google Maps_Scrollview_Coordinator Layout - Fatal编程技术网

Android 使用谷歌地图API进行缩放时禁用滚动

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

当我尝试平移谷歌地图时,CoordinatorLayout会向下滚动,当然我想平移地图。 如果我在地图外按住鼠标,然后尝试平移,那么效果会很好,但这不是一个很好的最终用户体验

OnTouchListener修复了部分问题。。。但前提是我水平平移。当我的手指向上或向下移动时,它停止平移地图。 我怎样才能解决这个问题

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,并查看是否有任何触摸正在进入地图。或者你可以在
开关上设置一个断点,看看它是否被击中。谢谢你给我指明了正确的方向。问题解决了。