显示和删除图像几秒钟

问题描述:

我需要显示一个图像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

您可以通过使用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(); 

方法:

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

感谢您的帮助!