0

Hier ist, was ich versuche zu tun. Ich wollte, dass der Benutzer ein Bild aus seiner Galerie auswählt, so wie es jeden Aktivitätshintergrund in der Anwendung festlegt.Legen Sie Hintergrund von der Galerie zu allen Aktivitäten Hintergrund

Hier ist, was ich getan habe 1.Ich habe eine gemeinsame Präferenz und zwei andere Attribute in jeder Aktivität, die ich die Tapete Benutzer wählen möchten. Hier ist die

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

2. Die Aktion erfolgt in Einstellungen Tätigkeit, bei der, wenn der Benutzer auf dem Image klickt, wird die Galerie Bildauswahl starten. Hier ist der Code für die ImageView, die Methode zum Starten der Gallery Image Selector.

1.Inside die Imageclicklistener

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

    } 
} 

Wie Sie sehen, ich schaffe das ausgewählte Bild aus der Galerie als Image Hintergrund zu setzen. Aber ich wollte das gleiche Bild, das der Benutzer als Hintergrund für alle anderen Aktivitäten ausgewählt hat. Ich habe wenige Bildauswahl in meiner App, damit der Benutzer sie als Hintergrund verwenden kann. Hier ist, wie ich es gemacht habe.

  1. In SettingsActivity (onCreate)

    getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
    

dann, wenn die Benutzer klicken Sie auf einem Bild ausgewählt, dann wird das Bild als Hintergrundbild für jede Aktivität ausgewählt.

2.Inside die besondere Imageview

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

3.Die Code, der in der ganzen Aktivität platziert wird, um das Hintergrundbild zu ändern.

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

Also noch einmal, wie kann ich den Bildbenutzer als Hintergrund für jede Aktivität ausgewählt verwenden. Ich habe versucht, von BitMap zu Drawable zu konvertieren, scheitert aber immer noch. Jede Hilfe würde helfen. S. Die meisten Codes stammen von mehreren Websites. Danke im Voraus.

Antwort

0

Sie haben diese Schritte zu tun

  1. die imagePath in SharedPreferences bei onActivityResult() ausgewählt Speichern nicht den R.drawable.wallpaper2 in preferences zu speichern.

    ... 
    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. Wenn neue Aktivität Öffnen Verwendung dieser Pfad Bild von hier zu erhalten und es als Hintergrund. Siehe unten

    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. Nochmals vielen Dank Herr @Sohail Zahid. – narispillai

Verwandte Themen