从Uri设置布局背景

时间:2013-06-18 18:46:22

标签: android

当我从图库中选择图像时,我会返回一个Uri。我想将此图像设置为布局的背景。如果它是一个ImageView,它会没事的。我该怎么办?

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

        mylayout.??

        break;  

2 个答案:

答案 0 :(得分: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); 
            }
        }
}

答案 1 :(得分:0)