2017-12-14 7 views
2

안드로이드 맵용 맞춤 마커를 만들려고합니다. Google 유틸리티의 IconGenerator를 사용하고 있습니다. 내 사용자 정의 마커에는 ParseImageView (Parse SDK의 이미지보기)가 포함되어 있습니다.이미지보기가 작동하지 않는 맞춤 마커 매핑

이것은 사용자 지정 마커의 코드입니다.

이 제 기능 generateRichMarkerIcon

 IconGenerator iconGenerator = new IconGenerator(getContext()); 
     ParseImageView imageView = new ParseImageView(getContext()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new ViewGroup.LayoutParams(70, 70)); 
     imageView.setParseFile(imageFile); 
     imageView.loadInBackground(); 

     iconGenerator.setContentView(imageView); 

     if (selected) { 
      iconGenerator.setColor(Color.BLUE); 
     } 

     return BitmapDescriptorFactory.fromBitmap(iconGenerator.makeIcon()); 

을 내부에 그리고 나는 아직도이

BitmapDescriptor icon = generateRichMarkerIcon(false, card); 
      Marker marker = this.googleMap.addMarker(new MarkerOptions() 
        .icon(icon) 
        .position(new LatLng(lat, lng))); 

처럼 사용, 나는 이미지를 볼 수는 없지만, 빈 마커 (크기가 괜찮습니다, 70x70) 내부 이미지보기없이. https://drive.google.com/file/d/1-t5FOrKotac5YMfNoLbZo1NFjEFGpqtg/view?usp=sharing

이 코드에 어떤 문제가 :

이것은 스크린 샷입니까?

답변

0

이미지가로드되기 전에 배경에서 이미지를로드 할 때 이미지를로드하기 전에 아이콘을 만들었 기 때문에 이미지가로드 될 때까지 기다렸다가 아이콘 생성기와 관련된 모든 작업을 수행해야합니다.

+0

고마워요! 그것이었습니다 :-) – Abhab

0

원하는 경우 Canvas를 사용하여 마커를 사용자 정의 할 수도 있습니다.

Marker myLocMarker = mMap.addMarker(new MarkerOptions() 
         .position(sydney) 
         .icon(BitmapDescriptorFactory.fromBitmap(writeTextOnDrawable(R.drawable.ic_marker_black, "$125")))); // where ic_marker_black is my marker custom Image, & "$125" is text i want to put on marker. 

를 사용하여 다음과 같은 방법을

private Bitmap writeTextOnDrawable(int drawableId, String text) { 

     Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId) 
       .copy(Bitmap.Config.ARGB_8888, true); 

     Typeface tf = Typeface.create("Helvetica", Typeface.BOLD); 

     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(Color.WHITE); 
     paint.setTypeface(tf); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(convertToPixels(MapActivity.this, 18)); 

     Rect textRect = new Rect(); 
     paint.getTextBounds(text, 0, text.length(), textRect); 

     Canvas canvas = new Canvas(bm); 

     //If the text is bigger than the canvas , reduce the font size 
     if (textRect.width() >= (canvas.getWidth() - 4))  //the padding on either sides is considered as 4, so as to appropriately fit in the text 
      paint.setTextSize(convertToPixels(MapActivity.this, 18));  //Scaling needs to be used for different dpi's 

     //Calculate the positions 
     int xPos = (canvas.getWidth()/2) - 2;  //-2 is for regulating the x position offset 

     //"- ((paint.descent() + paint.ascent())/2)" is the distance from the baseline to the center. 
     int yPos = (int) ((canvas.getHeight()/2) - ((paint.descent() + paint.ascent())/2)); 

     canvas.drawText(text, xPos, yPos, paint); 

     return bm; 
    } 


    public static int convertToPixels(Context context, int nDP) { 
     final float conversionScale = context.getResources().getDisplayMetrics().density; 

     return (int) ((nDP * conversionScale) + 0.5f); 

    } 

희망이 당신 도움이 : 나는 그것이 나에게 도움이 캔버스 &을 사용했다!

귀하의 질문은 similar Question과 유사합니다. 이 tutorial도 참조하십시오.

+0

캔버스를 사용해 보았지만 아무 것도 바뀌지 않았습니다 ... – Abhab

+0

@Abhab OutPut 화면을 공유하여 아이디어를 얻을 수 있습니다! –

+0

스크린 샷이 추가되었습니다! 수정 된 질문 확인 :-) – Abhab