【问题标题】:Android Street View API animateTo issueAndroid Street View API animateTo 问题
【发布时间】:2023-03-31 11:49:01
【问题描述】:

我正在构建一个带有街景的 Android 应用程序。在某些情况下,我想手动设置相机 POV。

我查看了指南on Google's dev website,但似乎无法正常工作。

我可以在我的应用程序中显示街景,并且可以移动相机,但它不会移动到我自定义的相机/FOV。

我的 Java 代码:

package com.mycompany.appname;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.model.LatLng;
import java.util.Random;
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.StreetViewPanoramaCamera;
import com.google.android.gms.maps.model.StreetViewPanoramaOrientation;

public class RaceMap extends FragmentActivity implements OnStreetViewPanoramaReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_race_map);
        StreetViewPanoramaFragment streetViewPanoramaFragment =
                (StreetViewPanoramaFragment) getFragmentManager()
                        .findFragmentById(R.id.streetviewpanorama);
        streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
    }

    @Override
    public void onStreetViewPanoramaReady(StreetViewPanorama panorama)  {
        long duration = 20;
        float tilt = 30;
        float bearing = 90;
        StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
                .zoom(panorama.getPanoramaCamera().zoom)
                .bearing(bearing)
                .tilt(tilt)
                .build();

        panorama.setPosition(new LatLng(52.208818, 0.090587));
        panorama.setStreetNamesEnabled(false);
        panorama.setZoomGesturesEnabled(false);
        panorama.animateTo(camera, duration);

    }
}

我的活动:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.mycompany.appname.RaceMap"
    android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
    android:id="@+id/streetviewpanorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

【问题讨论】:

  • 你的意思是,panorama.animateTo() 不起作用?
  • 没错,它根本不做任何事情。也不会抛出错误。
  • 我的答案正确吗?
  • 所以?过来结束问题

标签: android google-maps google-street-view


【解决方案1】:

尝试将持续时间设置为超过 500 毫秒,您会看到想要的结果。 1 秒就足够了。

final long duration = 1000;
panorama.animateTo(camera, duration);

我认为这可能是街景的一些错误。小于 500 的持续时间值无法正常工作。或者地图没有足够的时间制作动画。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,它似乎与应用 setPosition() 的延迟有关,这最终会覆盖相机位置动画。我的解决方案是等到位置变化后再打电话给animTo()

    我也同意 @pengrad 关于动画持续时间非常短的观点

    @Override
    public void onStreetViewPanoramaReady(final StreetViewPanorama panorama)  {
        final long duration = 1000; 
        float tilt = 30;
        float bearing = 90;
        final StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
                .zoom(panorama.getPanoramaCamera().zoom)
                .bearing(bearing)
                .tilt(tilt)
                .build();
    
        panorama.setPosition(new LatLng(52.208818, 0.090587));
        panorama.setStreetNamesEnabled(false);
        panorama.setZoomGesturesEnabled(false);
    
        panorama.setOnStreetViewPanoramaChangeListener(new StreetViewPanorama.OnStreetViewPanoramaChangeListener() {
            @Override
            public void onStreetViewPanoramaChange(StreetViewPanoramaLocation streetViewPanoramaLocation) {
                if (streetViewPanoramaLocation != null) {
                    panorama.animateTo(camera, duration);
                }
            }
        });
    }
    

    【讨论】:

    • 我猜setPosition() 必须花时间才能找到离给定位置最近的全景图。
    【解决方案3】:

    如果你想继续前进,只需使用这两种方法:

    float difference(StreetViewPanoramaLink link) {
            return Math.abs(panorama.getPanoramaCamera().bearing % 360 - link.bearing);
        }
    
    
        void moveForward() {
            StreetViewPanoramaLink curLink = null;
            for( int i=0; i < panorama.getLocation().links.length; i++) {
                float differ = difference(panorama.getLocation().links[i]);
                if(curLink == null) {
                    curLink = panorama.getLocation().links[i];
                }
                if(difference(curLink) > difference(panorama.getLocation().links[i])) {
                    curLink = panorama.getLocation().links[i];
                }
            }
            panorama.setPosition(curLink.panoId);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多