2017-04-21 18 views
0

画像を1秒間表示する必要があります。その時間の最後に1秒間表示しないで、もう一度表示する必要があります。リストは表示されなくなり、次の写真が表示されなくなりました。画像を数秒間表示して削除する

しかし、私のコードでは画像が1秒しか表示されませんが、次の画像では表示されません。

この私のコード:

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) 
private void showNextImage() { 
    // loads the image at position currentPosition 
    final Bits item = L.get(currentPosition); 
    imageBit.setImageBitmap(BitmapFactory.decodeFile(item.getbImage())); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      imageBit.setImageBitmap(BitmapFactory.decodeFile(item.getbImage())); 
     } 
    },1000); 

      handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         nameBit.setText(item.getbText()); 

         imageBit.setVisibility(View.GONE); 

        } 
       },1000); 
      currentPosition++; // updates the current position 
      if (L.size() > currentPosition) { // more images to show? 

       // loads the next image after some delay 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 

         showNextImage(); 
        } 
       }, 1000); // in millis, 1000 for one second delay 

      } 
} 
+0

問題ありそうですか? –

+1

ここに問題はないと思います。私たちの友人は私たちに知らせるように書いています:P: –

+0

ViewFlipperを使ってみましょう。あなたの画像を1人の子供で、もう1人の子供では空白にし、間隔を1秒に設定できます。 – Tasneem

答えて

0

あなたはHandlerを使用することによってそれを行うことができます。ちょうど旗を取るisShowing。以下は大まかなアイデアです。必要に応じて変更できます。

Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     showHideImage(); 
    } 
}; 

private void showHideImage() { 
    if(isShowing) { 
     isShowing = false; 
     showImage(); //Do whatever you want to 
    } else { 
     isShowing = true; 
     hideImage(); 
    } 
    yourImageView.postDelayed(runnable, ONE_SECOND); 
} 

は、あなただけの開始時に一度showHideImage()を呼び出す必要があり、残りはそれ自体で処理されます。

宣言...

private int currentPosition = 0; 
public ArrayList<Bitmap> ItemsBitmap; 
public Bitmap bitmap; 

public Bits items; 

初期化:

ItemsBitmap = new ArrayList<>(); 

    for(int i = 0; i < L.size(); i++){ 
     Bits item = L.get(i); 
     ItemsBitmap.add(BitmapFactory.decodeFile(item.getbImage())); 

    } 
    for (int x = 0; x < L.size(); x++){ 
     Bits item = L.get(x); 
     nameBit.setText(item.getbText()); 
    } 
    showImages(); 

方法:それは働いていた。このように

0

あなたの助けのための

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) 
private void showImages() { 
    new CountDownTimer(2000, 1000) { 
     boolean continuar = true; // Si quieres que se detenga, vuelve continuar false en algun momento 
     int number = 0; 
     public void onTick(long millisUntilFinished) { 
      if(number % 2 != 0) { 
       if(number == 101) 
        number = -1; // esto hace que la bandera no crezca mucho 
       imageBit.setVisibility(View.VISIBLE); 
       nameBit.setVisibility(View.GONE); 
      } 
      else { 
       bitmap = ItemsBitmap.get(currentPosition); 
       imageBit.setImageBitmap(bitmap); 
       items = L.get(currentPosition); 
       nameBit.setText(items.getbText()); 
       currentPosition++; 
       if (ItemsBitmap.size() == currentPosition) { 
        currentPosition = 0; // Esto hace que se vuelva a repetir la lista de Bitmaps 
       } 
       imageBit.setVisibility(View.GONE); 
       if (L.size() == currentPosition){ 
        currentPosition = 0; 
       } 
       nameBit.setVisibility(View.VISIBLE); 
      } 
      number++; 
     } 
     public void onFinish() { 

      if (continuar) { 
       this.start(); 
      } 
     } 
    }.start(); 
} 

感謝を!

関連する問題