允许用户从个性化屏幕中选择背景

时间:2013-10-20 21:03:46

标签: android android-imageview android-image

在我的小部件中,我希望用户能够通过从他们的图库中选择一张图片来设置主页面的背景,然后该图像也将显示在个性化屏幕上的imageView中(因此他们知道图像看起来像)。 到目前为止,我已在个性化页面上设置了imageView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/personalizetextView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/customize" 
    android:textSize="30dip"
    android:gravity="center"
    android:layout_marginTop="20dip"/>

<TextView 
    android:id="@+id/personalizetextviewChangeBackground"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/customizebackground"
    android:gravity="center" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/pattern1" />

<Button
    android:id="@+id/btnChangeImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/change_background" />

</LinearLayout>

当选择btnChangeImage时,它会引导用户进入图库,如下所示:

package com.example.awesomefilebuilderwidget;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class Personalize extends Activity{
Button button;
ImageView image;
private static final int SELECT_PICTURE = 1;
private String  selectedImagePath;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.personalize);

    addListenerOnButton();

}

public void addListenerOnButton() {

    image = (ImageView) findViewById(R.id.imageView1);

    button = (Button) findViewById(R.id.btnChangeImage);
    button.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(intent, SELECT_PICTURE);
        }

        public void onActivityResult(int requestCode, int resultCode, Intent data)
            {
                if (resultCode == RESULT_OK) {
                    if (requestCode == SELECT_PICTURE)
                    {
                        Uri selectedImageUri = data.getData();
                        selectedImagePath = getPath(selectedImageUri);
                        try {
                            FileInputStream fileis=new FileInputStream(selectedImagePath);
                            BufferedInputStream bufferedstream=new BufferedInputStream(fileis);
                            byte[] bMapArray= new byte[bufferedstream.available()];
                            bufferedstream.read(bMapArray);
                            Bitmap bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);
                            //Here you can set this /Bitmap image to the button background image

                            if (fileis != null) 
                            {
                                fileis.close();
                            }
                            if (bufferedstream != null) 
                            {
                                bufferedstream.close();
                            }
                        } catch (FileNotFoundException e) {                 
                            e.printStackTrace();
                        } catch (IOException e) {                   
                            e.printStackTrace();
                        }               
                    }
                }
            }


        public String getPath(Uri uri) {
                String[] projection = { MediaStore.Images.Media.DATA };
                Cursor cursor = managedQuery(uri, projection, null, null, null);
                int column_index = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            }

    });

}

}

如何制作图像,以便在选择图像时,图像会显示在图像视图中?那么,在imageview中设置的任何图像都会成为主文件的背景?

现在在主页面上,我只是设置了默认图像:

android:background="@drawable/pattern1" 

1 个答案:

答案 0 :(得分:1)

将您的图像从ActivityResult设置为ImageView:

image.setImageBitmap(bMap);

保存此图片,以便您可以再次使用它或在主要活动中使用它:

public boolean saveImageToInternalStorage(Bitmap image) {
   try {
      FileOutputStream fos = context.openFileOutput("desiredFilename.png", Context.MODE_PRIVATE);
      image.compress(Bitmap.CompressFormat.PNG, 100, fos);
      fos.close();   
      return true;
   } catch (Exception e) {
   return false;
   }
}

加载您的图片:

public Bitmap getThumbnail(String filename) {
   Bitmap thumbnail = null;
   try {
      File filePath = context.getFileStreamPath(filename);
      FileInputStream fi = new FileInputStream(filePath);
      thumbnail = BitmapFactory.decodeStream(fi);
   } catch (Exception ex) {
   Log.e("getThumbnail() on internal storage", ex.getMessage());
   }
   return thumbnail;
}

在主页面中将加载的图像设置为背景:

Drawable d = new BitmapDrawable(getResources(),bitmap);
yourBackgroundView.setBackground(d);