web-dev-qa-db-ja.com

グライドで画像をGoogleマップマーカーに読み込む

問題があります。 Glide3.8.0を使用しています。

サーバーから画像をダウンロードして、グーグルマップのマーカーに配置する必要があります。

_    Glide.with(getBaseActivity())
                .load(place.getIconUrl())
                .asBitmap()
                .fitCenter()
                .into(new SimpleTarget<Bitmap>(50,50) {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        map.addMarker(new MarkerOptions()
                                .icon(BitmapDescriptorFactory.fromBitmap(resource))
                                .position(place.getLatLng()));
                    }

                    @Override
                    public void onLoadFailed(Exception e, Drawable errorDrawable) {
                        map.addMarker(new MarkerOptions()
                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_marker_default_logo))
                        .position(place.getLatLng()));
                    }
                });
_

また、読み込みエラーが発生した場合のデフォルトのロゴがあります。サイズは50x50です。

私は2つのデバイス(ネクサス5と名前のないデバイス)でロードをテストします(画面の解像度と画面サイズはわかりませんが、サイズはネクサス5とほぼ同じです)

別のデバイスでは、マーカーのロゴのサイズが異なり、実験しています

.into(new SimpleTarget<Bitmap>(50,50)サイズ

Nexus 5、デフォルトのロゴと比較して50x50は非常に小さく、75x75はデフォルトよりも小さく、150x150はデフォルトと同じです

名前のないデバイス:デフォルトのロゴと同じ75x75、デフォルトより50x50小さい

したがって、Glideを使用して、別のデバイスで同じにし、デフォルトのロゴ50x50と同じにすることができます(デフォルトのロゴは別のデバイスで同じように見えます)

Nexus 5 50x50

Nexus 5 75x75

Nexus 5 150x150

8
pligosv

ビットマップの再作成で決定

Glide.with(getBaseActivity())
                .load(place.getIconUrl())
                .asBitmap()
                .dontTransform()
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        final float scale = getContext().getResources().getDisplayMetrics().density;
                        int pixels = (int) (50 * scale + 0.5f);
                        Bitmap bitmap = Bitmap.createScaledBitmap(resource, pixels, pixels, true);
                        markerImageView.setImageBitmap(bitmap);
                        addMarker(place.getLatLng());
                    }

                    @Override
                    public void onLoadFailed(Exception e, Drawable errorDrawable) {
                        markerImageView.setImageResource(R.drawable.ic_marker_default_logo);
                        addMarker(place.getLatLng());
                    }
                });
0
pligosv
 Glide.with(this).load("url").listener(object : RequestListener<Drawable> {
        override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {


          return true
        }

        override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
            callmethod(resource)     //pass drawable to your method and set the drawable for marker there
            imageSource=resource
            return true
        }

    })

を使用して

  BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(convertToBitmap(d,100,100));
  MarkerOptions markerOptions = new MarkerOptions()
            .position(latLng).icon(icon)
            .title(getString(titleResId))
            .draggable(true);

ドローアブルからビットマップを取得するためにも

 public Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
    Bitmap mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(mutableBitmap);
    drawable.setBounds(0, 0, widthPixels, heightPixels);
    drawable.draw(canvas);

    return mutableBitmap;
}

またはあなたはただ使うことができます

public Bitmap getBitmapFromURL(String strURL) {
    try {
        URL url = new URL(strURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
3
Harsh Agrawal

この方法を使用できます!

Glide.with(getApplicationContext()).asBitmap()
                    .load(dataSnapshot.child("dpURL").getValue(String.class))
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {

                            mMap.addMarker(new MarkerOptions().position(Origin).title(pno).icon(BitmapDescriptorFactory.fromBitmap(bitmappros(resource))));

                            if(firstload) {
                                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(Origin,16));
                                firstload = false;
                            }else{
                                mMap.animateCamera(CameraUpdateFactory.newLatLng(Origin));
                            }
                        }
                    });

ビットマッププロ機能用!

private Bitmap bitmappros(Bitmap res){
    View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
    markerImage  = marker.findViewById(R.id.user_dp);
    markerImage.setImageBitmap(res);

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    marker.setLayoutParams(new ViewGroup.LayoutParams(52, ViewGroup.LayoutParams.WRAP_CONTENT));
    marker.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
    marker.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
    marker.buildDrawingCache();
    Bitmap bitmap2 = Bitmap.createBitmap(marker.getMeasuredWidth(), marker.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap2);
    marker.draw(canvas);

    return bitmap2;
}