系统如何知道用户相机移动事件&自定义“飞行”返回当前位置按钮

时间:2018-04-11 08:17:16

标签: android

我刚刚使用Google Map API构建了我的Android应用,并设法让它运行我所期望的。但我仍然有一些问题需要改进我的用户界面。

问题1:
每当用户手动移动地图时(我通过在屏幕上滑动/点击),我想隐藏软键盘。我有一个工作隐藏软键盘功能,我只想在用户移动屏幕时调用它。

问题2:
我正在使用自定义“飞行”回到当前位置,但它很难看。我希望有类似默认谷歌的“飞行”按钮,它实际上有“飞”回“当前位置而不是传送回”。或者我可以将默认图标移到右下角。

这是我的代码的一部分:

 private void hideSoftKeyboard(){
    this.getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}

“飞行”按钮:

private void getDeviceLocation(){
    Log.d(TAG, "getDeviceLocation: getting the devices current location");

    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

    try{
        if(mLocationPermissionsGranted){

            final Task location = mFusedLocationProviderClient.getLastLocation();
            location.addOnCompleteListener(new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    if(task.isSuccessful()){
                        Log.d(TAG, "onComplete: found location!");
                        Location currentLocation = (Location) task.getResult();

                        moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),
                                   DEFAULT_ZOOM,
                                   "My Location");

                    }else{
                        Log.d(TAG, "onComplete: current location is null");
                        Toast.makeText(MapActivity.this, "unable to get current location", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }catch (SecurityException e){
        Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage() );
    }
}

 mGps.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG, "onClick: clicked gps icon");
                getDeviceLocation();
            }
        });

1 个答案:

答案 0 :(得分:0)

问题1:有一个名为 OnCamerMoveListener 的监听器,您可以使用它来了解地图移动和隐藏键盘的时间。

问题2:您可以使用 animateCamera 方法代替 moveCamera 进行平滑过渡。