Реализация кликов по URL - PullRequest
0 голосов
/ 15 мая 2018

Я создаю приложение для 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>

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете попробовать это (не уверен, что это лучшее решение):

Вы должны создать новую активность: WebView

<?xml version="1.0" encoding="utf-8"?>
 <WebView  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myWebView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" />

Затем добавьте скрытый TextView для каждого маркера с помощьюссылка:

TextView txtView = infoWindow.findViewById(R.id.link);
txtView.setVisibility(View.INVISIBLE);

Затем добавьте OnClickListener в информационное окно:

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
           Intent intent = new Intent(context ,myWebView.class);
           intent.putExtra("link", txtView.getText());
           startActivity(intent);
        }
    });

И, наконец, в веб-просмотре:

public class WebViewActivity extends Activity {

WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webView);
    Intent intent = getIntent();
    String link = intent.getExtra("link");

    webView = (WebView) findViewById(R.id.myWebView);
    webView.loadUrl(link);

}
...