2016-07-11 8 views
0

Ich habe eine Android-Anwendung. Der Schieberegler funktioniert einwandfrei, und die Freigabe-Schaltfläche funktioniert ebenfalls ordnungsgemäß.Erhalten des aktuellen Bildes, um es in Android zu teilen

Aber die Freigabe-Taste teilt nur ein Bild, das ich in Code aus den drei Gesamtbildern im Slider (da ich auf diese Weise codiert), anstelle des aktuellen Bildes in der Slider-Galerie sichtbar. Ich möchte einfach den Share-Button-Code mit dem aktuellen Bild aufrufen, damit der Benutzer das aktuelle Bild teilen kann.

Hier sind einige Details, 3 ImageView für 3 Bilder im Slider. Auch ich habe diese in ViewFlipper genommen:

Bild 1

 android:id="@+id/imageview1" 
     android:tag="bg1" 
     android:src="@drawable/image1 

Bild 2

 android:id="@+id/imageview2" 
     android:tag="bg2" 
     android:src="@drawable/image2 

Bild 3

 android:id="@+id/imageview3" 
     android:tag="bg3" 
     android:src="@drawable/image3 

Bis jetzt habe ich versucht, diese,

Nun, hier ist der share() Funktionscode Snippet, in dem ich das aktuelle Bild haben möchte. Dafür habe ich setTag() und getTag() genommen, aber ich bin immer noch verwirrt. Hier habe ich das Tag für alle 3 Bilder gesetzt, damit ich ihren Wert bekommen kann.

mImageView=(ImageView)findViewById(R.id.imageview1); 
    mImageView.setTag("bg1"); 

    mImageView=(ImageView)findViewById(R.id.imageview2); 
    mImageView.setTag("bg2"); 

    mImageView=(ImageView)findViewById(R.id.imageview3); 
    mImageView.setTag("bg3"); 

    String s = String.valueOf(mViewFlipper.getTag()); 

    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show(); 

    if (s.equals("bg1"))/
    { 
     // now the code for share button starts, in that a folder gets 
     created in the Directory and a default name is given to the 
     image which gets saved there, like 

     File f = new File(dir, "savedImage1.png"); 

Ich bin nicht sicher (ich will nicht zu tun, dass entweder) über die oben if-else zu, denn es ist nicht gut „wenn“ für jedes Bild zu erstellen, so brauche ich eine alternative wie ein Array), um das aktuelle Drawable-Bild zu umgehen.

Also in der obigen Zeichenfolge s ist die Rückkehr "null", bei der Auswahl eines Bildes (Ich überprüft es durch Anwenden von Toast und es zeigt in jedem Fall Null).

Wenn ich bg1 (für Bild 1), oder bg2 (für Bild 2) oder bg3 (für Bild 3), für das aktuelle Bild in String s, dann kann ich einfach den Code zur gemeinsamen Nutzung von a bestimmtes Bild nur, wenn es in der Slider-Galerie angezeigt wird.

Antwort

2

Line: String s = String.valueOf(mViewFlipper.getTag());

Sie versuchen, den Tag des ViewFlipper, nicht um das angezeigte Bild zu lesen.

Verwenden Sie flipper.getDisplayedChild();, um die angezeigte ImageView abzurufen und das Tag zu lesen.

Auch noch besser wäre ein Array der Dateinamen zur Vorbereitung Sie anzeigen, und dann den Index des angezeigten Bildes abrufen mit: flipper.indexOfChild(flipper.getCurrentView()).

Dann könnten Sie mit diesem Index in Ihr Dateinamensarray greifen und die Logik für die Bildfreigabe nur einmal schreiben.

+0

Danke, @Axarydax. Ich habe die flipper.getDisplayedChild() verstanden; und es hat perfekt funktioniert. –

+0

Aber ich bin immer noch verwirrt darüber, wie man ein Array erstellt und den Wert darin erhält, da ich BITMAP einmal aufrufen muss. Bedeutet, ich möchte es nicht wie folgt separat machen, bitmap = BitmapFactory.decodeResource (getResources(), R.drawable.image1); für Bild1 usw. –

+0

@AmanChawla Sie können in Ihrer Aktivität ein int [] Array von Image-IDs definieren und Werte von R.drawable.image1, R.drawable.image2 usw. darin enthalten. Wenn Sie die gleiche Reihenfolge wie in Ihrem ViewFlipper beibehalten, können Sie den index_fChild als Index für das Array verwenden, um die Image-ID zu erhalten. – Axarydax