0

Voici ce que j'essaie de faire. Je voulais que l'utilisateur choisisse une image de sa galerie en tant que fond d'activité dans l'application.Définir l'arrière-plan de la galerie à tous les arrière-plans d'activité

Voici ce que j'ai fait 1.J'ai une préférence partagée et deux autres attributs dans chaque activité que je veux appliquer l'utilisateur de papier peint choisir. Voici le

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

2. l'action se faire dans des activités où lorsque l'utilisateur clique sur le ImageView, il lancera l'image Galerie Selector. Voici le code pour ImageView, la méthode pour démarrer le sélecteur d'image de la galerie.

1.Inside le 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.Le code onActivityResult

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)); 

    } 
} 

Comme vous pouvez le voir, je parviens à définir l'image sélectionnée de la galerie comme l'arrière-plan ImageView. Mais je voulais la même image que l'utilisateur a choisi pour être l'arrière-plan de toutes les autres activités. J'ai peu de sélection d'image dans mon application pour permettre à l'utilisateur de l'utiliser comme arrière-plan. Voici comment je l'ai fait.

  1. Dans SettingsActivity (onCreate)

    getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
    

Ensuite, lorsque l'utilisateur clique sur l'un de l'image sélectionnée, l'image est sélectionnée comme fond d'écran pour chaque activité.

2.inside le imageView particulier

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

3.Procédé de code qui est placé dans toute l'activité de changer le papier peint.

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)); 

Donc, encore une fois, comment puis-je utiliser l'utilisateur d'image sélectionné comme arrière-plan pour chaque activité. J'ai essayé de convertir de BitMap à Drawable mais échoue toujours. Toute aide serait utile. p.s La plupart des codes proviennent de plusieurs sites Web. Merci d'avance.

Répondre

0

Vous devez faire ces étapes

  1. Save the sélectionné dans imagePathSharedPreferences à onActivityResult() Do not enregistrer le R.drawable.wallpaper2 dans 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. Quand une nouvelle activité utilisation Ouvrir ce chemin pour obtenir une image à partir d'ici et le définir comme arrière-plan. Voir ci-dessous

    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 
        } 
    } 
    
+0

Speechless. Merci encore Monsieur @Sohail Zahid. – narispillai