У меня есть imageView с изображением, поверх этого изображения я хочу разместить текст. Как я могу этого добиться?
android
android-imageview
android-image
AndyAndroid
источник
источник
Ответы:
Вот как я это сделал, и он работал точно так, как вы просили внутри 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>
источник
Вы можете взять if с другой стороны: кажется, проще иметь TextView с возможностью рисования на фоне:
<TextView android:id="@+id/text" android:background="@drawable/rounded_rectangle" android:layout_width="wrap_content" android:layout_height="wrap_content" </TextView>
источник
Вы могли бы
onDraw
.super.onDraw()
Сначала вызовите этот метод иесли вы сделаете это таким образом, вы можете использовать его как отдельный компонент макета, который упрощает макет вместе с другими компонентами.
источник
Для этого вы хотите использовать макет FrameLayout или Merge. В руководстве для разработчиков Android есть отличный пример: Уловки с макетом Android №3: Оптимизация путем слияния .
источник
Есть много способов. Вы используете RelativeLayout или AbsoluteLayout.
С помощью relative вы можете, например, выровнять изображение с родительским элементом с левой стороны, а также выровнять текст по родительскому левому краю ... тогда вы можете использовать поля, отступы и гравитацию в текстовом представлении, чтобы выровнять его там, где вы хочу поверх изображения.
источник
Вы можете использовать TextView и изменить его фон на изображение, которое хотите использовать.
источник
Для этого вы можете использовать только один TextView с
android:drawableLeft/Right/Top/Bottom
для размещения изображения в TextView. Кроме того, вы можете использовать некоторые отступы между TextView и рисованием с помощьюandroid:drawablePadding=""
Используйте это так:
<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"/>
При этом вам не нужен дополнительный ImageView. Также возможно использовать два чертежа на более чем одной стороне TextView.
Единственная проблема, с которой вы столкнетесь при использовании этого, заключается в том, что масштабируемый объект не может быть масштабирован так же, как ImageView.
источник
Попробуйте приведенный ниже код, это поможет вам
<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>
источник
Приведенный ниже код поможет вам
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(); } } }); } }```
источник