Почему скольжение и Пикассо не загружают изображение URL в Маркер Google Maps? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь загрузить изображение в свой CircleImageView из пользовательского макета маркера, который я сделал. Я попытался использовать glide или picasso, но ни один из них не работает, он только показывает изображение маркера. Может ли кто-нибудь помочь мне с этим. Я застрял около 4 часов в этом и до сих пор не могу найти, что было причиной этого.

place2 = new MarkerOptions()
         .position(storeLatLng)
         .icon(BitmapDescriptorFactory.fromBitmap(createCustomMarker(CheckOutActivity.this , storeIMG, storeName))).title(storeClass);


...

private static Bitmap createCustomMarker(Context context, final String resource, String name) {

        View marker = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.bitmap_google_marker_layout_item, null);
        de.hdodenhof.circleimageview.CircleImageView image = (de.hdodenhof.circleimageview.CircleImageView) marker.findViewById(R.id.user_dp);
        TextView txt_name = (TextView) marker.findViewById(R.id.name);
        txt_name.setText(name);

        //Glide.with(marker).load(resource).apply(new RequestOptions().placeholder(R.mipmap.loader)).into(image);
        Picasso.get()
                .load(resource)
                .placeholder(R.mipmap.loader)
                .error(R.drawable.error)
                .into(image);

        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).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 bitmap = Bitmap.createBitmap(marker.getMeasuredWidth(), marker.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        marker.draw(canvas);
        return bitmap;
    }

Вот пример изображения результата

Image of the Marker

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы можете сделать это, используя Picasso downloader -

Picasso.get().load(uri)
             .resize(50, 50)
             .into(new com.squareup.picasso.Target() {
                   @Override
                   public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                                    //Use bitmap for Marker
                  }
                  @Override
                  public void onBitmapFailed(Exception e, Drawable errorDrawable) {
                  }

                  @Override
                  public void onPrepareLoad(Drawable placeHolderDrawable) {
                  }
             });
0 голосов
/ 30 сентября 2019

Picasso или Glid загружает изображение асинхронно. В то время, когда вы создаете растровое изображение из вида, у ImageView есть только местозаполнитель (Picasso или Glid еще не загрузили и еще не установили изображение в ImageView). Таким образом, вы можете увидеть заполнитель в маркере. Как только вы создали Bitmap форму просмотра, все изменения в View позже не повлияют на растровое изображение.

Чтобы создать маркер с реальным изображением, вы должны обновить или воссоздать маркер снова после загрузки Picassoи установите изображение в ImageView.

. Я думаю, что лучше сделать Marker с заполнителем и обновить Marker после загрузки изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...