在ImageView上设置文本

时间:2011-07-22 11:25:50

标签: android imageview

我有一个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;你知道我怎么能解决这个问题?

4 个答案:

答案 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>

您可以将ImageViewTextView括起来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>