将背景从画廊设置为所有活动背景

时间:2016-10-16 03:31:58

标签: background imageview sharedpreferences background-image wallpaper

这就是我要做的事情。 我希望用户从他们的图库中选择一张图片,将其设置为应用程序中的每个活动背景。

这就是我的所作所为 1.我希望应用壁纸用户选择的每个活动中都有一个共享首选项和两个其他属性。这是

    private static final String PREF_NAME = "nextage_quiz";
    private static final int PRIVATE_MODE = 0;
    SharedPreferences getPrefs;

2.操作发生在设置活动中,当用户点击ImageView时,它将启动图库图像选择器。这是ImageView的代码,即启动图库图像选择器的方法。

1.Inside ImageView ClickListener

    private static int Load_Image_From_Gallery = 1;
    Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, Load_Image_From_Gallery);

2. onActivityResult Code

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == Load_Image_From_Gallery && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        ImageViewBackground5.setImageBitmap(BitmapFactory.decodeFile(picturePath));

    }
}

如您所见,我设法将库中的选定图像设置为ImageView背景。但是我想要用户选择的相同图像作为所有其他活动的背景。我的应用程序中几乎没有选择图像让用户将其用作背景。这是我如何做到的。

  1. 在SettingsActivity(onCreate)

    getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    
  2. 然后,当用户点击任何选定的图像时,图片将被选为每个活动的壁纸。

    2.在特定的imageView

    旁边
        getPrefs.edit().putInt("id", R.drawable.wallpaper2).apply();
    

    3.放置在所有活动中以更改壁纸的代码。

        getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    
        ImageView background= (ImageView) findViewById(R.id.background);
        if(getPrefs.getInt("id",0) != 0) 
           background.setBackgroundResource(getPrefs.getInt("id",0));
    

    同样,我如何使用所选的图像用户作为每个活动的背景。我尝试过从BitMap转换为Drawable但仍然失败。 任何帮助都会有帮助。 p.s大多数代码来自多个网站。在此先感谢。

1 个答案:

答案 0 :(得分:0)

您必须执行以下步骤

  1. imagePath中的所选SharedPreferences保存在onActivityResult(),不要将R.drawable.wallpaper2保存在preferences

    ...
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    
    // Here is addition to your code
    getPrefs.edit().putString("path", picturePath).apply();
    
    cursor.close();
    ImageViewBackground5.setImageBitmap(BitmapFactory.decodeFile(picturePath));
    
  2. 当新的活动打开时,使用此路径从此处获取图像并将其设置为背景。见下文

    public class MainActivity extends AppCompatActivity {

        private Context context;
        private ImageView img;
        private SharedPreferences getPrefs;
        private static final String PREF_NAME = "nextage_quiz";
        private static final int PRIVATE_MODE = 0;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
    
            getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
            img = (ImageView) findViewById(R.id.background);
    
            if (!getPrefs.getString("path", "").equalsIgnoreCase("")) {
                img.setImageBitmap(BitmapFactory.decodeFile(getPrefs.getString("path", "")));
            }
            //your other tasks below there
        }
    }