2016-11-08 6 views
0

私はアンドロイドアプリで作業しています。私のアプリには、Googleマップとマーカーのクラスタリングが施されています。アプリは4.4とロリポップデバイスで正常に動作しています。私は次のコードとrecieving次のエラーに java.lang.IllegalArgumentExceptionが使用してカスタムマーカーを作成しています:幅と高さを> 0ビットマップを作成するときに、幅と高さが> 0である必要があります

でなければならない私は、マーカー

private Bitmap getMarkerBitmapFromView(@DrawableRes int resId,String typeProfile) { 

    View customMarkerView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_view, null); 
    RelativeLayout _markerType = (RelativeLayout) customMarkerView.findViewById(R.id.markertype); 
    ImageView markerImageView = (ImageView) customMarkerView.findViewById(R.id.image); 
    //ImageView markerStatus = (ImageView) customMarkerView.findViewById(R.id.onlieStatus); 

    if(typeProfile.equals("blue")) { 
     _markerType.setBackgroundResource(R.drawable.markr_general); 


    } else if(typeProfile.equals("green")){ 
     _markerType.setBackgroundResource(R.drawable.markr_interest); 


    } else if(typeProfile.equals("red")) { 
     _markerType.setBackgroundResource(R.drawable.markr_profession); 


    } 

    markerImageView.setImageResource(resId); 
    customMarkerView.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.EXACTLY); 
    customMarkerView.layout(0, 0, customMarkerView.getMeasuredWidth(), customMarkerView.getMeasuredHeight()); 
    customMarkerView.buildDrawingCache(); 
    Bitmap returnedBitmap = Bitmap.createBitmap(customMarkerView.getMeasuredWidth(), customMarkerView.getMeasuredHeight(), 
      Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(returnedBitmap); 
    canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_IN); 
    Drawable drawable = customMarkerView.getBackground(); 
    if (drawable != null) 
     drawable.draw(canvas); 
    customMarkerView.draw(canvas); 
    return returnedBitmap; 

} 
としてカスタムビットマップを作成するため、このコードを使用しています

は、ここで私はあなたがwoulので、あなたが実際にコンソール上で、幅と高さの値を印刷する場合、それが役立つだろうと思う私のコードマーカrendringクラス

private class PersonRenderer extends DefaultClusterRenderer<Person> { 
    private final IconGenerator mIconGenerator = new IconGenerator(getApplicationContext()); 
    private final IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext()); 
    private final CircleImageView mImageView; 
    private final CircleImageView mClusterImageView; 
    private final int mDimension; 


    public PersonRenderer() { 
     super(getApplicationContext(), mMap, mClusterManager); 

     View multiProfile = getLayoutInflater().inflate(R.layout.custom_marker_view, null); 
     mClusterIconGenerator.setContentView(multiProfile); 
     mClusterImageView = (CircleImageView) multiProfile.findViewById(R.id.image); 

     mImageView = new CircleImageView(getApplicationContext()); 
     mDimension = (int) getResources().getDimension(R.dimen.custom_profile_image); 
     mImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension)); 
     int padding = (int) getResources().getDimension(R.dimen.custom_profile_padding); 
     mImageView.setPadding(padding, padding, padding, padding); 
     mIconGenerator.setContentView(mImageView); 

    } 

    @Override 
    protected void onBeforeClusterItemRendered(Person item, MarkerOptions markerOptions) { 
     mImageView.setImageResource(item.profilePhoto); 


     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(item.profilePhoto,item.profileType))).title("asfas"); 
     //Bitmap icon = mIconGenerator.makeIcon(); 
     // markerOptions.icon(getMarkerBitmapFromView(item.profilePhoto)).title(item.name); 
    } 

    @Override 
    protected void onBeforeClusterRendered(Cluster<Person> cluster, MarkerOptions markerOptions) { 
     /* List<Drawable> profilePhotos = new ArrayList<Drawable>(Math.min(4, cluster.getSize())); 
     int width = mDimension; 
     int height = mDimension; 


     MultiDrawable multiDrawable = new MultiDrawable(profilePhotos); 
     multiDrawable.setBounds(0, 0, width, height); 

     mClusterImageView.setImageDrawable(multiDrawable); 
     Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));*/ 




     if(cluster.getSize() == 2) { 

      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.for_two,2,cluster))); 

     } else if(cluster.getSize() == 3) { 

      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.for_three,3,cluster))); 

     } else if(cluster.getSize() == 4) { 

      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.images_for,4,cluster))); 

     } else if(cluster.getSize() > 4) { 

      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.images_for,cluster.getSize(),cluster))); 

     } 


    } 

    @Override 
    protected boolean shouldRenderAsCluster(Cluster cluster) { 
     // Always render clusters. 
     return cluster.getSize() > 1; 
    } 
} 
+0

実際には実際の値をフェッチすることができたかどうかを理解するために、コンソールの幅と高さの値を実際に印刷すると役に立ちます。まだ値が割り当てられていない場合は、幅と高さを呼び出すことができます。この[SOスレッド](http://stackoverflow.com/questions/17605662/illegalargumentexception-width-and-height-must-be-0-while-loading-bitmap-from)をチェックして、詳細な洞察を得てください。 – noogui

+0

ありがとう、それは –

+0

が解決されましたか? – noogui

答えて

0

ですあなたのプログラムが本当にいくつかの実際の値を取得できるかどうかをよく理解してください。まだ値が割り当てられていない場合は、幅と高さを呼び出すことができます。追加の洞察を得るために、このSOスレッドをチェックしてください。

関連する問題