2011-03-09 17 views
78

Tengo una imageView con una imagen, sobre esa imagen quiero colocar un texto. ¿Cómo puedo lograr eso?Android Texto sobre la imagen

+1

forma sencilla es toma un textView y configúralo como lo haces en ImageView. hará su trabajo fácil ... – Nepster

+0

solo mira el enlace de abajo. espero que ayudará a u ... https://stackoverflow.com/questions/11100428/add-text-to-image-in-android-programmatically/26064945#26064945 –

Respuesta

5

Hay muchas maneras. Usas RelativeLayout o AbsoluteLayout.

Con relativa, puede hacer que la imagen se alinee con el elemento primario del lado izquierdo, por ejemplo, y también alinee el texto con el elemento primario que queda ... luego puede usar márgenes, relleno y gravedad en la vista de texto para obtener se alineó donde desea sobre la imagen.

+1

me encontré con este método por accidente. Pero es muy útil cuando quieres poner algo de texto sobre un botón de imagen o una vista de imagen. Ejemplo: coloque la temperatura actual sobre la imagen de las condiciones actuales. – Phobos

5

Usted podría

  • hacer una nueva clase heredada de la clase ImageView y
  • reemplazar el método onDraw. Llame primero al super.onDraw() en ese método y al
  • y luego dibuje el texto que desea mostrar.

si lo hace de esa manera, puede usar esto como un único componente de diseño que facilita el diseño junto con otros componentes.

2

Puede utilizar un TextView y cambiar su fondo a la imagen que desea utilizar

+0

el problema con esta respuesta es que no puedes controlar los atributos de fondo como imageView. escala por ejemplo. –

131

Eso es cómo lo hice y funcionó exactamente como usted pidió dentro de un RelativeLayout:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativelayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:id="@+id/myImageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/myImageSouce" /> 

    <TextView 
     android:id="@+id/myImageViewText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@id/myImageView" 
     android:layout_alignTop="@id/myImageView" 
     android:layout_alignRight="@id/myImageView" 
     android:layout_alignBottom="@id/myImageView" 
     android:layout_margin="1dp" 
     android:gravity="center" 
     android:text="Hello" 
     android:textColor="#000000" /> 

</RelativeLayout> 
+0

Muchas gracias por este ejemplo. Traté de usar la vista de texto compuestaDibujado, pero allí no puedo configurar una URL de imagen. Pero es importante usar esta solución en un diseño relativo para que se reconozcan las configuraciones de layout_align. – AntonSack

+0

poniendo la identificación del control en la alineación resuelto mucho, gracias –

14

Usted lo desea, puede tomar si de un lado diversa: parece más fácil tener un TextView con un dibujable en el fondo:

<TextView 
      android:id="@+id/text" 
      android:background="@drawable/rounded_rectangle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     </TextView> 
+9

el problema con esta respuesta es que no puedes controlar los atributos de fondo como imageView. escala por ejemplo. –

2

para ello se puede utilizar sólo una TextView con android:drawableLeft/Right/Top/Bottom para colocar una Imagen en TextView. Además se puede utilizar un poco de relleno entre la Vista de Texto y el dibujable con android:drawablePadding=""

utilizar de esta manera:

<TextView 
    android:id="@+id/textAndImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 

    android:drawableBottom="@drawable/yourDrawable" 
    android:drawablePadding="10dp" 
    android:text="Look at the drawable below"/> 

Con esto usted no necesita una ImageView adicional. También es posible usar dos diseños en más de un lado de TextView.

El único problema al que se enfrentará al usar esto es que el dibujo no se puede escalar como un ImageView.

1

Prueba el código de abajo esto ayudará you`

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="150dp"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:src="@drawable/gallery1"/> 


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:background="#7ad7d7d7" 
     android:gravity="center" 
     android:text="Juneja Art Gallery" 
     android:textColor="#000000" 
     android:textSize="15sp"/> 
</RelativeLayout> 
-1

El código de abajo esto le ayudará a

public class TextProperty { 
private int heigt;        //读入文本的行数 
private String []context = new String[1024]; //存储读入的文本 

/* 
*@parameter wordNum 
* 
*/ 
public TextProperty(int wordNum ,InputStreamReader in) throws Exception { 
    int i=0; 
    BufferedReader br = new BufferedReader(in); 
    String s; 
    while((s=br.readLine())!=null){ 
     if(s.length()>wordNum){ 
      int k=0; 
      while(k+wordNum<=s.length()){ 
       context[i++] = s.substring(k, k+wordNum); 
       k=k+wordNum; 
      } 
      context[i++] = s.substring(k,s.length()); 
     } 
     else{ 
      context[i++]=s; 
     } 
    } 
    this.heigt = i; 
    in.close(); 
    br.close(); 
} 


public int getHeigt() { 
    return heigt; 
} 

public String[] getContext() { 

    return context; 
} 

}

public class MainActivity extends AppCompatActivity { 

private Button btn; 
private ImageView iv; 
private final int WORDNUM = 35; //转化成图片时 每行显示的字数 
private final int WIDTH = 450; //设置图片的宽度 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    iv = (ImageView) findViewById(R.id.imageView); 
    btn = (Button) findViewById(R.id.button); 

    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      int x=5,y=10; 
      try { 
       TextProperty tp = new TextProperty(WORDNUM, new InputStreamReader(getResources().getAssets().open("1.txt"))); 
       Bitmap bitmap = Bitmap.createBitmap(WIDTH, 20*tp.getHeigt(), Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(bitmap); 
       Paint paint = new Paint(); 
       paint.setColor(Color.WHITE); 
       paint.setTextAlign(Paint.Align.LEFT); 
       paint.setTextSize(20f); 

       String [] ss = tp.getContext(); 
       for(int i=0;i<tp.getHeigt();i++){ 
        canvas.drawText(ss[i], x, y, paint); 
        y=y+20; 
       } 

       canvas.save(Canvas.ALL_SAVE_FLAG); 
       canvas.restore(); 
       String path = Environment.getExternalStorageDirectory() + "/image.png"; 
       System.out.println(path); 
       FileOutputStream os = new FileOutputStream(new File(path)); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); 
       //Display the image on ImageView. 
       iv.setImageBitmap(bitmap); 
       iv.setBackgroundColor(Color.BLUE); 
       os.flush(); 
       os.close(); 
      } 
      catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


     } 
    }); 
} 

}

Cuestiones relacionadas