找到位置后显示地图&地图就绪

时间:2018-04-06 06:33:39

标签: android android-animation android-location android-maps-v2

我正在尝试使用Maps实现此加载。我已经尝试在创建Google Map并找到位置后加载我的动画。但是在动画完成后开始加载位置。在地图相机导航到用户所在位置后,如何实现曝光动画。

I am trying to achieve this loading with Maps

我没有使用Splash Screen。动画代码在MapsActivity中。

private void setupRevealBackground(){
        final int revealX = (int) (mBackgroundView.getX() + mBackgroundView.getWidth() / 2);
        final int revealY = (int) (mBackgroundView.getY() + mBackgroundView.getHeight() / 2);
        ViewTreeObserver viewTreeObserver = mBackgroundView.getViewTreeObserver();
        if (viewTreeObserver.isAlive()) {
            viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    revealActivity(revealX, revealY);
                    mBackgroundView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
            });
        }
    }

    protected void revealActivity(int x, int y) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            float finalRadius = (float) (Math.max(mBackgroundView.getWidth(), mBackgroundView.getHeight()) * 1.1);

            // create the animator for this view (the start radius is zero)
            Animator circularReveal = ViewAnimationUtils.createCircularReveal(mBackgroundView, x, y, 0, finalRadius);
            circularReveal.setDuration(400);
            circularReveal.setInterpolator(new AccelerateInterpolator());

            // make the view visible and start the animation
            circularReveal.start();
            circularReveal.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {

                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    mBackgroundView.setVisibility(View.GONE);
                }

                @Override
                public void onAnimationCancel(Animator animation) {

                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            });
        } else {
            finish();
        }
    }

我找到位置后更新位置首选项更改侦听器。

@Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals(Constants.LatitudePref)) {
            Latitude = LocationResultHelper.getSavedLatitude(sharedPreferences);
            Longitude = LocationResultHelper.getSavedLongitude(sharedPreferences);
            if (mPickUpLatLng == null){
                updateMarker(new LatLng(Latitude, Longitude));
            }
        } else if (key.equals(Constants.KEY_LOCATION_UPDATES_REQUESTED)) {
            LocationRequestHelper.getRequesting(this);
        }
    }

这是找到位置后的updateMarker方法

private void updateMarker(LatLng userLocation) {
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 16));
        setupRevealBackground();
     }

我尝试在setupRevealBackground()中添加CameraIdleListener方法,但永远不会调用该方法。

1 个答案:

答案 0 :(得分:0)

如此answer所示,您可以使用OnMapLoadedCallback

如果您有对地图的引用,请设置回叫。

mMap.setOnMapLoadedCallback(this);

onMapLoaded事件触发时拍摄快照。

@Override
public void onMapLoaded() {
    // Here you can display your map with animation
}