J'ai un imageView avec une image, sur cette image je veux placer un texte. Comment puis-je y arriver?
Voici comment je l'ai fait et cela a fonctionné exactement comme vous l'aviez demandé dans 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>
Vous voudrez peut-être prendre si d'un autre côté: Il semble plus facile d'avoir un TextView avec un dessin sur l'arrière-plan:
<TextView
Android:id="@+id/text"
Android:background="@drawable/rounded_rectangle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
</TextView>
Vous souhaitez utiliser une disposition FrameLayout ou Merge pour y parvenir. Android Le guide de développement en fournit un bon exemple ici: Astuces de mise en page Android n ° 3: Optimiser par la fusion .
Vous pourriez éventuellement
onDraw
. Appelez super.onDraw()
dans cette méthode en premier etsi vous le faites de cette manière, vous pouvez l'utiliser comme un seul composant de mise en page, ce qui facilite la mise en page avec d'autres composants.
Il y a beaucoup de façons. Vous utilisez RelativeLayout ou AbsoluteLayout.
Avec relative, vous pouvez, par exemple, aligner l'image sur le parent du côté gauche et le texte également sur le parent gauche ... vous pouvez ensuite utiliser les marges, les marges et la gravité sur la vue du texte pour l'aligner à l'endroit où vous le souhaitez. vouloir sur l'image.
Essayez le code ci-dessous cela vous aidera
<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>
Vous pouvez utiliser un TextView et changer son arrière-plan pour l'image que vous souhaitez utiliser
Pour cela, vous ne pouvez utiliser qu'un seul TextView avec Android:drawableLeft/Right/Top/Bottom
pour positionner une image sur le TextView. De plus, vous pouvez utiliser du padding entre TextView et le dessinable avec Android:drawablePadding=""
Utilisez-le comme ceci:
<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"/>
Avec cela, vous n'avez pas besoin d'un ImageView supplémentaire. Il est également possible d’utiliser deux dessinables de plusieurs côtés de TextView.
Le seul problème que vous rencontrerez en utilisant ceci est que le dessin ne peut pas être redimensionné à la manière d'un ImageView.
Le code ci-dessous cela vous aidera
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();
}
}
});
}
}