Android Tekst na obrazie


Odpowiedzi:


163

Oto jak to zrobiłem i działało dokładnie tak, jak prosiłeś w 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>

Wielkie dzięki za ten przykład. Próbowałem użyć widoku tekstowego complexedDrawable, ale nie mogę ustawić adresu URL obrazu. Ale ważne jest, aby zastosować to obejście w układzie względnym, aby ustawienia layout_align zostały rozpoznane.
AntonSack

wprowadzenie identyfikatora kontroli do wyrównania rozwiązane wiele, dzięki
kal kokah

17

Możesz wziąć, jeśli z innej strony: Wydaje się, że łatwiej jest mieć TextView z rysunkiem w tle:

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

10
Problem z tą odpowiedzią polega na tym, że nie możesz kontrolować atrybutów tła, takich jak imageView. na przykład skalę.
Jesus Dimrix

6

Mógłbyś prawdopodobnie

  • Utwórz nową klasę dziedziczoną z klasy ImageView i
  • nadpisać Method onDraw. Zadzwoń super.onDraw()w tej metodzie pierwszym i
  • następnie narysuj tekst, który chcesz wyświetlić.

jeśli zrobisz to w ten sposób, możesz użyć tego jako pojedynczego komponentu układu, co ułatwia układanie razem z innymi komponentami.



5

Jest wiele sposobów. Używasz RelativeLayout lub AbsoluteLayout.

W przypadku wartości względnej możesz na przykład wyrównać obraz z rodzicem po lewej stronie, a także wyrównać tekst do rodzica po lewej stronie ... wtedy możesz użyć marginesów, dopełnienia i grawitacji w widoku tekstu, aby wyrównać go tam, gdzie chcesz nad obrazem.


1
Trafiłem na tę metodę przez przypadek. Jest to jednak bardzo przydatne, gdy chcesz umieścić tekst na przycisku obrazu lub widoku obrazu. Przykład - umieść aktualną temperaturę na obrazie aktualnych warunków.
Fobos

2

Możesz użyć TextView i zmienić jego tło na obraz, którego chcesz użyć


Problem z tą odpowiedzią polega na tym, że nie możesz kontrolować atrybutów tła, takich jak imageView. na przykład skalę.
Jesus Dimrix

2

W tym celu możesz użyć tylko jednego TextView z android:drawableLeft/Right/Top/Bottomdo umieszczenia obrazu w TextView. Ponadto możesz użyć dopełnienia między TextView a rysunkiem zandroid:drawablePadding=""

Użyj tego w ten sposób:

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

Dzięki temu nie potrzebujesz dodatkowego ImageView. Możliwe jest również użycie dwóch drawables na więcej niż jednej stronie TextView.

Jedynym problemem, jaki napotkasz, używając tego, jest to, że rysowalny nie może być skalowany tak, jak ImageView.


2

Wypróbuj poniższy kod, który ci pomoże

  <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

Poniższy kod pomoże ci

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();
                }
            }
        });
    }
}```
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.