2013-06-18 60 views
1

我从画廊中选择图像时返回Uri。我想将此图像设置为我的布局的背景。如果它是一个ImageView,那就没问题。我该怎么做?从Uri设置布局的背景

case LOAD_FROM_GALLERY: 
     mImageCaptureUri = data.getData(); 
     //ImageView.setImageURI(mImageCaptureUri); 

     mylayout.?? 

     break; 

回答

4

尝试以下

Uri path = data.getData(); 
ImageView iv= (ImageView) findViewById(R.id.imageView1); 
iv.setImageURI(path); 

编辑:

Uri path = data.getData(); 

然后调用

File f = new File(getRealPathFromURI(path)); 
    Drawable d = Drawable.createFromPath(f.getAbsolutePath()); 
myalyout.setBackground(d); 

getRealPathFromURI方法

private String getRealPathFromURI(Uri contentURI) { 
      Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
      if (cursor == null) { // Source is Dropbox or other similar local file path 
       return contentURI.getPath(); 
      } else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       return cursor.getString(idx); 
      } 
     } 

实施例:

activtiy_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/rl" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="106dp" 
     android:text="Button" /> 

</RelativeLayout> 

MainActivity.java

public class MainActivity extends Activity { 

    RelativeLayout rl; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     rl = (RelativeLayout) findViewById(R.id.rl); 
     Button b = (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       getImage(); 
      } 
     }); 
    } 

    public void getImage() 
    { 
     // To open up a gallery browser 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"),1); 
     // To handle when an image is selected from the browser, add the following to your Activity 
    } 
     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
     // currImageURI is the global variable I�m using to hold the content:// URI of the image 
     Uri currImageURI = data.getData(); 
     File file = new File(getRealPathFromURI(currImageURI)); 

     if (file.exists()) { 

      Drawable d = Drawable.createFromPath(file.getAbsolutePath()); 
      rl.setBackground(d); 
     } 
     } 
     } 
     } 
     private String getRealPathFromURI(Uri contentURI) { 
      Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
      if (cursor == null) { // Source is Dropbox or other similar local file path 
       return contentURI.getPath(); 
      } else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       return cursor.getString(idx); 
      } 
     } 
} 
+0

在文档中寻找等效方法,请不要忘记接受答案 – Raghunandan

+0

使用setBackground(drawable) – Raghunandan

+0

是的,我找到了,谢谢。与此同时,我也设法用imageview来完成它,但图像被挤压以适合屏幕。有没有办法显示图像的中心并切断边缘,以便在布局或图像视图中很好地显示图像? – erdomester

0
+0

就像我说的,我有一个布局,而不是一个imageview – erdomester

+0

好吧,那么我明白你的陈述“如果它是一个ImageView,那就没问题”。然后请显示您的布局xml,让我们知道您要设置图像的位置。 – Opiatefuchs

+0

为什么?这是一个由对象组成的正常的相关布局。因此,如果我能够将图像设置为布局的bg,那么手机屏幕的整个屏幕将是该图像。 – erdomester