Android文本在图像上
我有一个imageView与图像,我想放置一个文本的图像。 我怎样才能做到这一点?
我就是这样做的,它的工作原理与你所要求的一样:
<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>
PS:只能在RelativeLayout中使用
你可能想从不同的angular度来看:在背景上使用可绘制的TextView似乎更容易:
<TextView android:id="@+id/text" android:background="@drawable/rounded_rectangle" android:layout_width="wrap_content" android:layout_height="wrap_content" </TextView>
你可能可以
- 创build一个从Class ImageViewinheritance而来的新类
- 重写Method
onDraw
。 首先调用super.onDraw()
方法 - 然后画一些你想要显示的文字。
如果你这样做,你可以把它作为一个单独的布局组件,这样就可以更容易地与其他组件一起布局。
你想使用一个FrameLayout或合并布局来实现这一点。 Android开发指南在这里有一个很好的例子: Android布局技巧#3:通过合并进行优化 。
有很多方法。 你使用RelativeLayout或者AbsoluteLayout。
相对的,你可以让图像与左侧的父alignment,例如也有文本alignment左边的父母…那么你可以使用边距,填充和重力在文本视图,以得到它内衬你的地方想要在图像上。
您可以使用TextView并将其背景更改为您要使用的图像
为此,只能使用一个带有android:drawableLeft/Right/Top/Bottom
的TextView来将图像定位到TextView。 此外,你可以在TextView和drawable之间使用一些填充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的多个边上使用两个drawable。
你将面临的唯一问题是,drawable不能被缩放成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(); } } }); }
}