2012-09-13 6 views
7

Ich versuche, eine Ansicht zu meinem Kartencluster zu setzen. ich bin eine Ansicht von einem XML aufblasen und den Text entsprechend Clustergröße einstellen und ich möchte diese Ansicht zeigen. im folgenden Code i erhalte eine null-Bitmap im Gegenzug:android Konvertierung von XML-Ansicht zu Bitmap ohne es anzuzeigen

private Bitmap createClusterBitmap(int clusterSize) { 
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null); 
    TextView clusterSizeText = (TextView) cluster.findViewById(R.map.cluster); 
    clusterSizeText.setText(String.valueOf(clusterSize)); 
    Bitmap clusterBitmap = Bitmap.createBitmap(cluster.getLayoutParams().width, cluster.getLayoutParams().height, Bitmap.Config.ARGB_8888);     
    Canvas clusterCanvas = new Canvas(clusterBitmap); 
    cluster.layout(cluster.getLeft(), cluster.getTop(), cluster.getRight(), cluster.getBottom()); 
    cluster.draw(clusterCanvas); 
    return clusterBitmap; 
} 

und beim Wechsel es an:

private Bitmap createClusterBitmap(int clusterSize) { 
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null);   
    cluster.setText(String.valueOf(clusterSize)); 
    cluster.setDrawingCacheEnabled(true); 
    cluster.buildDrawingCache(true); 
    Bitmap bm = cluster.getDrawingCache(); 
    return bm; 
} 

im folgenden Code i Null-Zeiger auf der vierten Linie (das Layout params) erhalte Mit dem folgenden Code ich nicht Fehler angezeigt, aber nichts ist drawed:

private Bitmap createClusterBitmap(int clusterSize) { 
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null); 
    TextView clusterSizeText = (TextView) cluster.findViewById(R.map.cluster); 
    clusterSizeText.setText(String.valueOf(clusterSize)); 
    Bitmap clusterBitmap = Bitmap.createBitmap(50,50 , Bitmap.Config.ARGB_8888);     
    Canvas clusterCanvas = new Canvas(clusterBitmap); 
    cluster.layout(50, 50, 50, 50; 
    cluster.draw(clusterCanvas); 
    return clusterBitmap; 
} 

das ist mein XML:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+map/cluster" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/map_pointer_cluster" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:textColor="@android:color/black" 
    android:textSize="35dp" 
    android:textStyle="bold" /> 
+0

die Lösung in [diese] [1] Antwort [1]: http://stackoverflow.com/questions/2339429/android-view-getdrawingcache- returns-null-only-null/4618030 # 4618030 –

Antwort

21

Ihr cluster.getLayoutParams() ist wahrscheinlich null. Zuerst müssen Sie die Breite/Höhe Ihrer aufgeblasenen Ansicht messen und dann zuweisen. Machen Sie es wie folgt:

private Bitmap createClusterBitmap(int clusterSize) { 
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, 
      null); 

    TextView clusterSizeText = (TextView) cluster.findViewById(R.id.map_cluster_text); 
    clusterSizeText.setText(String.valueOf(clusterSize)); 

    cluster.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    cluster.layout(0, 0, cluster.getMeasuredWidth(),cluster.getMeasuredHeight()); 

    final Bitmap clusterBitmap = Bitmap.createBitmap(cluster.getMeasuredWidth(), 
      cluster.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(clusterBitmap); 
    cluster.draw(canvas); 

    return clusterBitmap; 
} 
+0

R.map.cluster ???? – Hamidreza

+2

@Hamidreza war es ein Tippfehler. Danke für das Aufzeigen :) – waqaslam

Verwandte Themen