2013-07-23 10 views
10

Hi Ich habe versucht, Zahlen auf Imageview zu schreiben. Bilder für N Anzahl der Fragen. Wenn die eingegebene Antwort korrekt ist, dann sollte sie mit der Frage Nummer mit dem Häkchen Bild andere Frage Nummer mit falschem Bild angezeigt werden. Ich muss die Frage Nummer auf dem Bild schreiben. Mein Code ist hier:Wie schreibe ich Text auf ImageView in Android-Codierung?

LinearLayout l_layout = (LinearLayout) findViewById(R.id.linear_view_report); 
    LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f); 
    ImageView[] imgview=new ImageView[questions.length]; 
    for(int i=0;i<no_of_questions;i++) 
    { 
       if(userEnteredAnswers[i]==correct_answer[i]){   
        Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.correct); 
        Canvas canvas = new Canvas(bm); 
        Paint paint = new Paint(); 
        paint.setColor(Color.BLACK); 
        paint.setTextSize(10); 
        canvas.drawText(i, 5, 5, paint); 

        imgview[i]=new ImageView(this); 
        imgview[i].setImageDrawable(new BitmapDrawable(bm)); 
        l_layout.addView(imgview[i]); 
       } 
       else {   
        Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.wrong); 
        Canvas canvas = new Canvas(bm); 
        Paint paint = new Paint(); 
        paint.setColor(Color.BLACK); 
        paint.setTextSize(10); 
        canvas.drawText(i, 5, 5, paint); 

        imgview[i]=new ImageView(this); 
        imgview[i].setImageDrawable(new BitmapDrawable(bm)); 
        l_layout.addView(imgview[i]); 
       }  
      } 

ich diese Warnung erhalten:

The constructor BitmapDrawable(Bitmap) is deprecated 

Bild zeigt nicht zur Laufzeit. Was mache ich falsch?

Antwort

14

Ich glaube, die einfachste Problemumgehung ohne überschreiben wäre eine TextView und legen Sie den Hintergrund mit einer drawable Ressource.

Zum Beispiel:

TextView t = (TextView)findViewById(R.id.my_text_view); 
// setting gravity to "center" 
t.setGravity(Gravity.CENTER); 
t.setBackgroundResource(R.drawable.my_drawable); 
t.setText("FOO"); 
+0

Hey danke für deine Idee. Es funktioniert!!! Aber ich möchte, dass sich der Text in einer bestimmten Position des Bildes befindet. Wie geht das? –

+0

@VigneshBala Ich denke, es wäre sehr schwierig, wenn überhaupt möglich, bestimmte Teile des Zeichens zu referenzieren. Natürlich können Sie den Text mit dem Attribut 'gravity' verschieben ... – Mena

+0

Danke Kumpel, es hat geklappt !!! Du bist so toll ... Schließlich bekomme ich, was ich wollte –

2

ist es nicht möglich, Text auf imageview zu schreiben, aber Sie können extend es dazu tun. Alternativ kann

  1. Sie ein Element hinzufügen, das ImageView im layout überlappen, und es ist nur sichtbar, wenn Ihre Bedingung wahr wird.

  2. oder können Sie textView verwenden Bild anzuzeigen, als Hintergrund oder als ziehbar/rechts nach links ..

Ps: jedoch die Option 1 ist einfacher zu implementieren, aber es wird zusätzliches Rendering haben. Überlegen Sie also zuerst die andere Option.

+0

Sie können ImageView ableiten, onDraw überschreiben und canvas.drawText nach super.onDraw aufrufen. Es ist also möglich, Text auf einem ImageView zu schreiben. – npace

+0

@npace ... ich habe das nicht berücksichtigt, da ich andere Wege vorgeschlagen habe, die etwas einfacher sind. – Ankit

+0

Fair genug.Ihr zweiter Vorschlag sollte genauso gut sein, aber der erste würde einen überflüssigen Zeichnungsaufruf machen, obwohl es der einfachste Weg ist, dies zu tun. – npace

4

Vom Android documentation:

BitmapDrawable (Bitmap Bitmap) Dieser Konstruktor wurde in API-Ebene veraltet 4. Verwenden Sie BitmapDrawable (Ressourcen, Bitmap), um sicherzustellen, dass die ziehbar richtig seine Zieldichte gesetzt hat.

Sie können auch Ihre eigene Ansicht erstellen (siehe Android: Creating Custom Views tutorial für ein Beispiel) und Sie Bild und den Text in dieser Ansicht setzen.

3

1). Machen Sie Ihr eigenes Layout sagen Image_TextView.xml wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:layout_width="150dp" 
     android:layout_height="150dp" 
     android:gravity="center" > 

     <ImageView 
      android:id="@+id/imgview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:adjustViewBounds="true" 
      android:cropToPadding="true" 
      android:scaleType="center" 
      android:src="@drawable/box" /> 

     <RelativeLayout 
      android:layout_width="150dp" 
      android:layout_height="35dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_marginBottom="0dp" 
      android:background="#80666666" > 

      <TextView 
       android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:text="Hello" 
       android:textColor="#FFFFFF" 
       android:textStyle="bold"/> 
     </RelativeLayout> 
    </RelativeLayout> 

</LinearLayout> 

Dieses Bild mit Text über sie machen.

2). Verwenden Sie dann den Layout-Inflator, um diese Ansicht in der übergeordneten Ansicht aufzublasen.

Hinweis: Mit dem Layout-Inflator können Sie eine andere Ansicht zu Ihrer übergeordneten Ansicht hinzufügen.