将相机移动到mapview

时间:2017-03-21 10:08:57

标签: android google-maps

我的联系人活动中有一个小地图视图: image

但我不知道如何将相机移动到特定位置,我之前已经在MapActivity上完成了,但是不知道如何在这里完成。我不知道在哪里使用moveCamera函数,因为在MapActivity中没有onMapReady,感谢任何帮助人员。代码:

爪哇:

public class Contacts extends AppCompatActivity {
private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contacts);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("Contactos");
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.abili.agriexport2.Contacts">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="25dp"
        android:orientation="vertical"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="0dp">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.20">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/textView7"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_marginTop="25dp"
                    android:layout_weight="1"
                    android:text="Onde Estamos:"
                    android:textSize="18sp" />

                <fragment
                    android:id="@+id/miniMap"
                    android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:layout_weight="8" />
            </LinearLayout>
        </ScrollView>


    </LinearLayout>

</android.support.v7.widget.LinearLayoutCompat>

6 个答案:

答案 0 :(得分:1)

试试这个:

xml中的

<fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
代码中的

:声明

static final LatLng Your_Location = new LatLng(23.81, 90.41); //Your LatLong
private GoogleMap mMap;

然后在OnCreate()

((SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() {

        @Override
        public void onMapReady(GoogleMap googleMap) {

            mMap = googleMap;
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Your_Location, 15));  //move camera to location
            if (mMap != null) {
                Marker hamburg = mMap.addMarker(new MarkerOptions().position(Your_Location));
            }
            // Rest of the stuff you need to do with the map
        }
    });

答案 1 :(得分:1)

@alb您可以使用与您在onMapReadyCallback中使用的相同的实现。 以下是代码中的一些更改,因为您没有实例化显示默认视图的地图

 <fragment
android:id="@+id/miniMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_weight="8"
/>

通过替换地图片段来更新xml

react-select

答案 2 :(得分:0)

将侦听器写入mapfragment

MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.miniMap);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                //write your moveCamera function here
            }
        });

答案 3 :(得分:0)

试试这段代码:

 googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(Latitude, Longitude), 18));

答案 4 :(得分:0)

尝试使用LocationManager并在onLocationChanged侦听器中创建标记

    public void onLocationChanged(Location location) {
        final LatLng latlng = new LatLng(location.getLatitude(),location.getLongitude());
       createMarker(latlng);
    }

    private void createMarker(LatLng latlng) {
        MarkerOptions markerOptions = null;
        try {
            markerOptions = new MarkerOptions().position(latlng).title("Title");
        } catch (IOException e) {
            e.printStackTrace();
        }
        final Marker marker = googleMap.addMarker(markerOptions);
 }

创建标记后,我使用下面的代码在移动相机时为标记设置动画:

 final LatLngInterpolator latLngInterpolator = new LatLngInterpolator.LinearFixed();

    final LatLng startPosition = marker.getPosition();
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    final Interpolator interpolator = new LinearInterpolator();
    final float durationInMs = 3000;

    handler.post(new Runnable() {
        long elapsed;
        float t;
        float v;

        @Override
        public void run() {
            // Calculate progress using interpolator
            elapsed = SystemClock.uptimeMillis() - start;
            t = elapsed / durationInMs;
            v = interpolator.getInterpolation(t);
            marker.setPosition(latLngInterpolator.interpolate(v, startPosition, googleMap.getCameraPosition().target));

            if (t < 1) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);
            }
        }
    });

答案 5 :(得分:0)

由于您的地图非常静态,因此如果您添加相机目标并缩放到XML,则可以获得更清晰的代码。只需将其添加到<fragment>中的layout.xml(更改坐标和缩放级别以满足您的需求):

xmlns:map="http://schemas.android.com/apk/res-auto"
map:cameraTargetLat="40"
map:cameraTargetLng="-4"
map:cameraZoom="18"
tools:ignore="MissingPrefix" 

注意:您需要使用tools:ignore="MissingPrefix"行来修复此Unexpected namespace "map" - Android Google Maps API