2016-07-11 6 views
0

У меня есть приложение для Android. В этом слайдер работает нормально, и кнопка совместного доступа также работает правильно.Получение текущего изображения, чтобы поделиться им в Android

Но кнопка совместного доступа делится только изображением, которое я установил в коде из трех полных изображений в слайдере (так как я закодирован таким образом), вместо текущего изображения, видимого в галерее слайдеров. Я просто хочу вызвать код кнопки совместного доступа с текущим изображением, чтобы пользователь мог поделиться текущим изображением.

Вот несколько деталей, 3 ImageView для 3 изображений в слайдере. Кроме того, я взял их в ViewFlipper:

Изображение 1

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

Изображение 2

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

Изображение 3

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

До сих пор, я попробовал это,

Button btShare = (Button) findViewById(R.id.shareImage); 
    btShare.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      share(); 
     } 
    }); 

Теперь вот фрагмент кода функции share(), в котором я хочу текущее изображение. Для этого я взял setTag() и getTag(), но я все еще смущен. Здесь я установил тег для всех трех изображений, чтобы получить их значение.

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

Я не уверен (я не хочу делать что либо) о выше, если-то еще тоже, потому что это не хорошо, чтобы создать «если» для каждого изображения, так что мне нужно альтернативный как массив) или так, чтобы обойти текущее графическое изображение.

Таким образом, в приведенной выше строке String s возвращается «null», при выборе любого изображения (я проверил его, применив Toast, и он показывает нуль в каждом случае).

Если мне удастся получить bg1 (для изображения 1) или bg2 (для изображения 2) или bg3 (для изображения 3), для текущего изображения в String s, то я могу легко запустить код для совместного использования только конкретное изображение, когда оно отображается в галерее слайдера.

ответ

2

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

Вы пытаетесь прочитать тег ViewFlipper, не отображаемого изображения.

Используйте flipper.getDisplayedChild(); для извлечения отображаемого ImageView и чтения от него.

Также было бы лучше подготовить массив имен файлов, которые вы показываете, а затем получить индекс отображаемого изображения с помощью: flipper.indexOfChild(flipper.getCurrentView()).

Затем вы можете обратиться к массиву имен файлов с этим индексом и написать логику для совместного использования изображений только один раз.

+0

Спасибо, @Axarydax. Я понял flipper.getDisplayedChild(); и он работал отлично. –

+0

Но я все еще смущен тем, как создать массив и получить его значение, поскольку я должен один раз вызвать BITMAP. Значит, я не хочу делать это следующим образом: bitmap = BitmapFactory.decodeResource (getResources(), R.drawable.image1); для изображения1 и т. д. –

+0

@AmanChawla В вашей деятельности вы можете определить массив идентификаторов int [], и в нем есть значения R.drawable.image1, R.drawable.image2 и т. Д. Если вы сохраняете тот же порядок, что и в вашем ViewFlipper, вы можете использовать индекс indexOfChild для индекса, чтобы получить идентификатор изображения. – Axarydax