2017-04-21 103 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秒。 – 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(),其餘部分將自行處理。

0

這樣它的工作:

聲明...

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

方法:

@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(); 
} 

感謝您的幫助!