Android:InfoWindowAdapter没有显示图片

时间:2016-07-07 06:07:47

标签: android google-maps android-volley infowindow image-loading

我在我的应用程序中处理地图。我在其中使用InfoWindowAdapter。我有图像视图。但是在打开信息窗口图像时不显示。

infoWindow的xml如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="4dp"
    card_view:contentPadding="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/imageView_infoWindow"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:scaleType="fitXY"/>

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


            <TextView
                android:id="@+id/textView_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Large Text"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <TextView
                android:id="@+id/textView_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Medium Text"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/textView_location"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Small Text"
                android:textAppearance="?android:attr/textAppearanceSmall" />
        </LinearLayout>

    </LinearLayout>
</android.support.v7.widget.CardView>

活动代码如下:

public class LocationActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleMap.OnMyLocationChangeListener, GoogleMap.OnMyLocationButtonClickListener {
    private GoogleMap mMap;
    public LatLng MOUNTAIN_VIEW;
    int METERS = 20000;
    final private int PERMISSION_REQUEST_CODE_FOR_ACCESS_LOCATION = 123;

    List<MarkerOptions> markerOptionsList;
    ArrayList<ModelLocation> modelLocation;

    protected LocationManager locationManager;
    boolean isGPSEnabled = false;
    boolean isNetworkEnabled = false;
    boolean canGetLocation = false;
    Location location; // location
    double latitude; // latitude
    double longitude; // longitude
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

    ImageLoader mImageLoader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setElevation(2);

        actionBar.setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(true);
        actionBar.setTitle("Location");
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.getUiSettings().setIndoorLevelPickerEnabled(true);
        mMap.getUiSettings().setZoomControlsEnabled(true);

        if (checkPermission()) {
            mMap.setMyLocationEnabled(true);
            mMap.setOnMyLocationChangeListener(this);
        } else {
            requestPermission();
        }

        CameraPosition cameraPosition = new CameraPosition.Builder().target(MOUNTAIN_VIEW)
            .zoom(17)                   
            .bearing(360)                
            .tilt(45)                  
            .build();                 
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                final LatLng latLng = cameraPosition.target;

                final Location location = new Location("Camera_Location");
                location.setLatitude(latLng.latitude);
                location.setLongitude(latLng.longitude);

                final ProgressDialog progressDialog = new ProgressDialog(LocationActivity.this, R.style.ProgressBarTansparent);
                progressDialog.setIndeterminate(true);
                progressDialog.setCancelable(false);
                progressDialog.show();
                progressDialog.setContentView(R.layout.custom_progressbar_layout);

                String url = "My URL To Get Data";
                JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("Key","Value");
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                final JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArrayUserList = response.getJSONArray("ABC");
                            modelLocation = new ArrayList<>();

                            int size = jsonArrayUserList.length();
                            if (size > 0) {
                                for (int count = 0; count < size; count++) {
                                    JSONObject jsonObject = jsonArrayUserList.getJSONObject(count);

                                    int userID = jsonObject.getInt("userID");
                                    String Name = jsonObject.getString("address");
                                    String address = jsonObject.getString("ADD");
                                    float latitude = Float.parseFloat(jsonObject.getString("latitude"));
                                    float longitude = Float.parseFloat(jsonObject.getString("longitude"));
                                    String image = jsonObject.getString("image");


                                    ModelLocation modelLocation1 = new ModelLocation(userID, Name, address, latitude, longitude, image);
                                    modelLocation.add(modelLocation1);
                                }

                                Location target = new Location("target");

                                for (ModelLocation modelLocation1 : modelLocation) {
                                    target.setLatitude(modelLocation1.latitude);
                                    target.setLongitude(modelLocation1.longitude);
                                    LatLng point = new LatLng(modelLocation1.latitude, modelLocation1.longitude);

                                    MarkerOptions markerOptions = new MarkerOptions().title(modelLocation1.Name).snippet(modelLocation1.address).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin)).anchor(0.0f, 1.0f).position(point);
                                    if (location.distanceTo(target) < METERS) {
                                        if (isMarkerOnArray(markerOptionsList, markerOptions)) {
                                        } else {
                                        markerOptionsList.add(markerOptions);
                                            Marker marker = mMap.addMarker(markerOptions);
                                            dropic_pinEffect(marker);
                                        }
                                    }
                                }
                            }
                            progressDialog.dismiss();
                        } catch (Exception e) {
                        }
                        progressDialog.dismiss();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialog.dismiss();
                    }
                }) {
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<String, String>();
                        headers.put("Content-Type", "application/json");
                        return headers;
                    }
                };
                Volley.newRequestQueue(LocationActivity.this).add(postRequest);
            }
        });

        mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
            @Override
            public View getInfoWindow(Marker marker) {
                return null;
            }

            @Override
            public View getInfoContents(Marker marker) {
                View view = getLayoutInflater().inflate(R.layout.info_window_layout, null);
                LatLng latLng = marker.getPosition();
                for (int count = 0; count < modelLocation.size(); count++) {
                    double currentLat = modelLocation.get(count).getLatitude();
                    double currentLng = modelLocation.get(count).getLongitude();
                    if ((currentLat == latLng.latitude) && (currentLng == latLng.longitude)) {
                        TextView textViewTitle = (TextView) view.findViewById(R.id.textView_title);
                        TextView textViewAddress = (TextView) view.findViewById(R.id.textView_address);
                        TextView textViewLocation = (TextView) view.findViewById(R.id.textView_location);
                        final NetworkImageView imageViewUserImage = (NetworkImageView) view.findViewById(R.id.imageView_infoWindow);
                        textViewTitle.setText("" + modelLocation.get(count).getName());
                        textViewAddress.setText("" + modelLocation.get(count).getAddress());
                        textViewLocation.setText(currentLat + ", " + currentLng);

                        mImageLoader = VolleySingletonClass.getInstance(LocationActivity.this).getImageLoader();

                        String url = "My URL Of Image";
                        imageViewUserImage.setImageUrl(url, mImageLoader);
                        imageViewUserImage.setDefaultImageResId(R.drawable.ic_user_default);
                        imageViewUserImage.setErrorImageResId(R.drawable.ic_user_default);
                    }
                }
                return view;
            }
        });

        mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(Marker marker) {
                Intent intent = new Intent(LocationActivity.this, Activity2.class);             
                startActivity(intent);
                finish();
            }
        });
    }

    static boolean isMarkerOnArray(List<MarkerOptions> listMarkerOptions, MarkerOptions markerOptions) {
        for (int count = 0; count < listMarkerOptions.size(); count++) {
            MarkerOptions current = listMarkerOptions.get(count);
            if ((current.getPosition().latitude == markerOptions.getPosition().latitude) && (current.getPosition().longitude == markerOptions.getPosition().longitude))
                return true;
        }
        return false;
    }

    private boolean checkPermission() {
        int result = ContextCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

    private void requestPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)) {
        } else {
            ActivityCompat.requestPermissions(LocationActivity.this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, PERMISSION_REQUEST_CODE_FOR_ACCESS_LOCATION);
        }
    }

    @SuppressLint("NewApi")
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE_FOR_ACCESS_LOCATION:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mMap.setMyLocationEnabled(true);
                    mMap.setOnMyLocationChangeListener(this);
                    mMap.setOnMyLocationButtonClickListener(this);
                } else {
                        Toast.makeText(LocationActivity.this, "Permission Denied", Toast.LENGTH_LONG).show();
                    ActivityCompat.requestPermissions(LocationActivity.this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, PERMISSION_REQUEST_CODE_FOR_ACCESS_LOCATION);
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    private void dropic_pinEffect(final Marker marker) {
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        final long duration = 1000;

        final Interpolator interpolator = new BounceInterpolator();

        handler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - start;
                float t = Math.max(1 - interpolator.getInterpolation((float) elapsed / duration), 0);
                marker.setAnchor(0.5f, 1.0f + 7 * t);

                if (t > 0.0) {
                    handler.postDelayed(this, 15);
                } else {
                }
            }
        });
    }

    @Override
    public void onMyLocationChange(Location location) {}

    @Override
    public boolean onMyLocationButtonClick() {
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    protected void onResume() {
        super.onResume();
        getLocation();
        if (canGetLocation()) {
            double lat = getLatitude();
            double lng = getLongitude();

            MOUNTAIN_VIEW = new LatLng(lat, lng);

            markerOptionsList = new ArrayList<MarkerOptions>();
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        } else {
            showSettingsAlert();
        }
    }

    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    public Location getLocation() {
        try {
            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            if (!isGPSEnabled && !isNetworkEnabled) {
            } else {
                this.canGetLocation = true;
                if (isNetworkEnabled) {
                    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    }
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                if (isGPSEnabled) {
                    if (location == null) {
                        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                        }
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, (LocationListener) this);
                        if (locationManager != null) {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return location;
    }

    public double getLatitude() {
        double lati = 0;
        if (location != null) {
            lati = location.getLatitude();
        }
        return lati;
    }

    public double getLongitude() {
        double longi = 0;
        if (location != null) {
            longi = location.getLongitude();
        }
        return longi;
    }

    public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setTitle("GPS is settings");
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });
        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Intent intent = new Intent(LocationActivity.this, Activity1.class);
                startActivity(intent);
                finish();
            }
        });

        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                dialog.dismiss();
                Intent intent = new Intent(LocationActivity.this, Activity1.class);
                startActivity(intent);
                finish();
            }
        });
        alertDialog.show();
    }
}

我在谷歌搜索了为什么图像不显示,所以我知道我需要刷新信息窗口适配器可能。或者是Volley实施问题?

请建议我我的实施是否正确以及我应该执行哪些步骤在打开窗口的图片视图中显示图片

0 个答案:

没有答案