我有一个Android应用程序,我用相机手机拍照...并将图片放在ImageView
。接下来我要做的是在这张图片的底部设置一个文字。 / p>
到目前为止,我做过类似的事情:
ImageView image;
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
image.setImageBitmap(bitmap);
请你帮帮我,告诉我接下来该怎么办?有些代码会很好!
编辑:XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<Button
android:id="@+id/logoButton"
android:layout_height="wrap_content"
android:text="LogoButton"
android:layout_marginLeft="40dip"
android:layout_width="224dp">
</Button>
<ImageView
android:id="@+id/imageview"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</ImageView>
更新:这是我使用相机的方式:
....onCreate(){
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image=new File(Environment.getExternalStorageDirectory(),"PhotoContest.jpg");
camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(image));
imageUri=Uri.fromFile(image);
startActivityForResult(camera,1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
image= (ImageView) findViewById(R.id.imageview);
ContentResolver cr = getContentResolver();
Bitmap bitmap;
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
image.setImageBitmap(bitmap);
Toast.makeText(this, selectedImage.toString(),
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
Log.e("Camera", e.toString());
}
}
else
if(resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(EditPhoto.this, "Picture could not be taken.", Toast.LENGTH_SHORT).show();
}
}
}
1.我不确定FrameLayout的这个技巧会将文字放在我的图片上...因为我想要上传更多照片。如果我在网站上传照片,文字是否仍然存在? ?
2.我对相机有另一个问题......拍完照片后......显示它并不是全屏...&gt;你知道我怎么能解决这个问题?
答案 0 :(得分:3)
您可以构建由图片制作的新图像+覆盖的文本,也可以在屏幕上显示为图层。这取决于您是否希望保存并重复使用带有文本叠印的图像。
我理解你的问题,这不是这里的情况(如果我错了请告诉我,我会更新这个答案)。所以FrameLayout
是你的朋友:它允许将图形组件显示为叠印帧:
<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView ...your picture, with the desired attributes />
<TextView ...your text, with the desired attributes />
</FrameLayout>
您可以将ImageView
和TextView
括起来LinearLayout
以使其与其他组件(如按钮等)一起使用。简单地说,您必须考虑直接包含在其中的每个组件FrameLayout
作为一个新框架,您可以将其设计为任何常规布局。
继续您对xevincent在此页面上的回答的评论:如果您要显示相机的预览而不是ImageView
,则可以定义自己的{{1}这将照顾SurfaceView
的生命周期:
Camera
然后,在你的布局中使用这个类:
package com.example;
// imports
public class CameraView extends SurfaceView implements SurfaceHolder.Callback {
public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);
initializeSurfaceHolder();
}
public void surfaceCreated(SurfaceHolder holder) {
// call Camera.open(); and Camera.setPreviewDisplay(holder); here
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Call Camera.setParameters() and Camera.startPreview() here
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Call Camera.stopPreview() and Camera.release() here
}
private void initializeSurfaceHolder() {
// This initializes the SUrfaceHolder of your Camera
final SurfaceHolder holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
答案 1 :(得分:1)
您可以使用FrameLayout并相应地放置图片和文字
答案 2 :(得分:0)
在布局中,创建垂直方向的ImageView和TextView,并在textView中设置文本!
答案 3 :(得分:0)
这个link是一个布局技巧,但这个例子显示了你想要的内容。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
android:src="@drawable/golden_gate" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_gravity="center_horizontal|bottom"
android:padding="12dip"
android:background="#AA000000"
android:textColor="#ffffffff"
android:text="Golden Gate" />
</FrameLayout>