Resmin üzerine Android Metni


97

Bir resim içeren bir imageView var, bu resmin üzerine bir metin yerleştirmek istiyorum. Bunu nasıl başarabilirim?


1
Basit yol, bir textView almak ve ImageView'da yaptığınız gibi arka planı ayarlamaktır. işinizi kolaylaştıracak ..
AndroidGeek

sadece aşağıdaki bağlantıya bakın. Umarım size yardımcı olur ... stackoverflow.com/questions/11100428/…
Ganesh Katikar

Yanıtlar:


163

Ben böyle yaptım ve tam olarak bir RelativeLayout'ta istediğiniz gibi çalıştı:

<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>

Bu örnek için çok teşekkürler. CompoundedDrawable metin görünümünü kullanmayı denedim, ancak orada bir resim url'si ayarlayamıyorum. Ancak, layout_align ayarlarının tanınması için bu geçici çözümü göreceli bir düzende kullanmak önemlidir.
AntonSack

kontrol kimliğini hizalamaya koymak çok çözüldü, teşekkürler
kal kokah

17

Farklı bir yönden şunu almak isteyebilirsiniz: Arka planda bir çekilebilir olan bir TextView'a sahip olmak daha kolay görünüyor:

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

10
bu cevapla ilgili sorun, imageView gibi arka plan özniteliklerini kontrol edememenizdir. örneğin ölçek.
Jesus Dimrix

6

Muhtemelen yapabilirsin

  • Class ImageView'dan miras alınan yeni bir sınıf yapmak ve
  • Yöntemi geçersiz kılın onDraw. super.onDraw()Önce bu yöntemi çağırın ve
  • sonra görüntülemek istediğiniz bir Metin çizin.

bu şekilde yaparsanız, bunu tek bir Düzen Bileşeni olarak kullanabilirsiniz, bu da diğer bileşenlerle birlikte düzenlemeyi kolaylaştırır.



5

Birçok yolu var. RelativeLayout veya AbsoluteLayout kullanıyorsunuz.

Göreli ile, örneğin sol taraftaki ana görüntü ile aynı hizada olmasını sağlayabilir ve ayrıca metnin sol üst tarafla da hizalanmasını sağlayabilirsiniz ... daha sonra metin görünümünde kenar boşluklarını, dolgu ve yerçekimini kullanarak istediğiniz yerde hizalayabilirsiniz. resmin üzerine istiyorum.


1
Bu yönteme tesadüfen geldim. Ancak bir görüntü düğmesinin veya bir görüntü görünümünün üzerine bir metin koymak istediğinizde çok kullanışlıdır. Örnek - mevcut sıcaklığı mevcut koşulların görüntüsünün üzerine koyun.
Phobos

2

Bir TextView kullanabilir ve arka planını kullanmak istediğiniz görüntüyle değiştirebilirsiniz.


bu cevapla ilgili sorun, imageView gibi arka plan özniteliklerini kontrol edememenizdir. örneğin ölçek.
Jesus Dimrix

2

Bunun için yalnızca bir TextView kullanabilirsiniz. android:drawableLeft/Right/Top/Bottom bir Resmi TextView'e konumlandırmak . Ayrıca, TextView ile çekilebilir arasında bazı dolgu kullanabilirsiniz.android:drawablePadding=""

Bunu şu şekilde kullanın:

<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"/>

Bununla fazladan bir ImageView'a ihtiyacınız yok. TextView’un birden fazla tarafında iki çekilebilir öğe kullanmak da mümkündür.

Bunu kullanarak karşılaşacağınız tek sorun, çekilebilir dosyanın ImageView gibi ölçeklenememesidir.


2

Aşağıdaki kodu deneyin, bu size yardımcı olacaktır

  <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>

0

Aşağıdaki kod size yardımcı olacaktır

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();
                }
            }
        });
    }
}```
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.