Я создаю приложение для Android, которое в основном сосредоточено на моем университете и нескольких конкретных местах вокруг университета.
После того, как вы нажмете на один из значков, появится пользовательское информационное окно с некоторой базовой информацией (например, нажмите на библиотеку, и появится окно с логотипом, заголовком и фрагментом информации).
Моя проблема на данный момент в том, что я понятия не имею, как я могу щелкнуть значок >>>, чтобы открыть информационное окно.Затем нажмите на информационное окно и получите его для реализации веб-просмотра, который приведет меня к определенному URL-адресу (например, www.google.com).
Я мог бы сделать это без реализации фрагмента карты, но янужен фрагмент карты для использования в приложении?
Может кто-нибудь помочь в этом вопросе.
Мой код, как показано ниже
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
static final LatLng uc = new LatLng(-35.2366583, 149.0868123);
private static final float ZOOM_BY = -1.0f;
long duration = 5000;
float tilt = 0;
private static final int PAN_BY = 180;
private GoogleMap map;
WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.normal) {
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
} else if (id == R.id.hybrid) {
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else if (id == R.id.satellite) {
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else if (id == R.id.terrain) {
map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
}
return super.onOptionsItemSelected(item);
}
@Override
public void onMapReady(GoogleMap map) {
LatLng uc = new LatLng(-35.2366583, 149.0868123);
final LatLng uc_library = new LatLng(-35.2378895,149.0822935);
LatLng uc_gym = new LatLng(-35.2384935,149.0855926);
LatLng uc_mainparkingarea = new LatLng(-35.241702, 149.084667);
LatLng uc_natsemcentre = new LatLng(-35.2405378,149.0858629);
LatLng uc_studentcentre = new LatLng(-35.2389137,149.0825285);
LatLng uc_hub = new LatLng(-35.2381962,149.0823544);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(uc, 13));
CameraPosition cameraPosition = CameraPosition.builder()
.target(uc)
.zoom(13)
.bearing(0)
.build();
// Animate the change in camera view over 2 seconds
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition),
2000, null);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(uc, 13));
//// Polylines are useful for marking paths and routes on the map.
map.addPolygon(new PolygonOptions()
.add(new LatLng(-35.230900,149.0805000),
new LatLng(-35.234783, 149.091833),
new LatLng(-35.241979, 149.090240),
new LatLng(-35.243031, 149.073927),
new LatLng(-35.241152, 149.073545),
new LatLng(-35.230900,149.0805000))
.strokeColor(Color.BLUE).fillColor(Color.WHITE)
);
//Marker declarations for icon clicks
final Marker library = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_library))
.position(uc_library)
.title("UC Library")
.snippet("This is the uc library")
.flat(true));
final Marker gym = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_gym))
.position(uc_gym)
.title("UC Gym")
.snippet("This is the uc gym")
.flat(true));
final Marker parking = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_parking))
.position(uc_mainparkingarea)
.title("Parking")
.snippet("This is the main parking area")
.flat(true));
final Marker natsem = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_sc))
.position(uc_natsemcentre)
.title("Nat Sem Centre")
.snippet("This is the UC Nat Sem Centre")
.flat(true));
final Marker studentcentre = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_student_centre))
.position(uc_studentcentre)
.title("UC Student Centre")
.snippet("This is the UC Student Centre")
.flat(true));
final Marker hub = map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_the_hub))
.position(uc_hub)
.title("UC Hub")
.snippet("This is the UC Hub")
.flat(true));
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
View infoWindow = getLayoutInflater().inflate(R.layout.infowindow_with_image, null);
TextView title = (TextView) infoWindow.findViewById(R.id.textViewTitle);
TextView snippet = (TextView) infoWindow.findViewById(R.id.textViewSnippet);
ImageView image = (ImageView) infoWindow.findViewById(R.id.imageView);
if (marker.getId().equals(library.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_library, getTheme()));
}
else if(marker.getId().equals(gym.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_gym, getTheme()));
}
else if(marker.getId().equals(parking.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_parking, getTheme()));
}
else if(marker.getId().equals(natsem.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_sc, getTheme()));
}
else if(marker.getId().equals(studentcentre.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_student_centre, getTheme()));
}
else if(marker.getId().equals(hub.getId())) {
title.setText(marker.getTitle());
snippet.setText(marker.getSnippet());
image.setImageDrawable(getResources()
.getDrawable(R.mipmap.ic_the_hub, getTheme()));
}
return infoWindow;
}
});
}
public void normalViewClick(MenuItem item) {
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
public void hybridViewClick(MenuItem item) {
}
public void satelliteViewClick(MenuItem item) {
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
}
public void terrainViewClick(MenuItem item) {
}
public void noneViewClick(MenuItem item) {
}
}
Макет здесь.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.ibrah.ucapplication.MainActivity"
tools:showIn="@layout/activity_main">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="0dp"
android:layout_height="0dp"
android:name="com.google.android.gms.maps.MapFragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>