2012-01-18 71 views
0

我有一個ViewFlipper與許多圖像。我添加圖像ViewFlipper像這樣:當前視圖名稱來自ViewFlipper

bitmap = BitmapFactory.decodeFile(files[i].getPath()); 
img = new ImageView(this); 
img.setImageBitmap(bitmap); 
img.setScaleType(ImageView.ScaleType.FIT_XY); 
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.FILL_PARENT)); 
img = null; 

進入for循環。當動畫開始我想知道像(形象的名字)將顯示,因爲一些圖片,我必須stopflipping的ViewFlipper.我嘗試這樣做:

animFlipInNext.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       System.out.println("AnimStart- LeftIn" + " Will be displayed " 
         + vf.getDisplayedChild()); 
       final File[] imageName = images.listFiles(); //images that I want for viewflipper to stop. 
       for (int i = 0; i < images.length(); i++) { 
        bitmap = BitmapFactory.decodeFile(imageName[i].getPath()); 
        Drawable background = new BitmapDrawable(bitmap); 
        if (vf.getCurrentView().getBackground().equals(background)) { 
         System.out.println("begin " 
           + files[i].getName()); 
        } else 
         System.out.println("NUNUNU"); 

       } 
      } 

但沒有任何反應。我沒有收到任何消息。我的錯誤在哪裏?或者,如何做到這一點?

回答

0

幾個問題,我挑出來:

視圖起落會通過您的視圖的自動循環以設定的間隔。我不確定您的聽衆是否會在每次「翻頁」時觸發,或者只有在您第一次致電startFlipping()時纔會觸發。您可以測試每次翻轉是否被調用,或僅在翻轉開始時輸入Log.v()作爲第一行並檢查輸出。

你也有一個邏輯錯誤在這裏被絆倒您:

vf.getCurrentView().getBackground().equals(background) 

在這行代碼你不檢查,如果背景對象具有相同的來源,你可能會問,如果它是完全一樣的對象。你知道這不是因爲你剛纔在該行中創建了新的background對象。

但是,您應該能夠實現這樣的目標。所有Views都有一個「適合所有人」的屬性,您可以根據自己的需要使用它。考慮以下代碼:

bitmap = BitmapFactory.decodeFile(files[i].getPath()); 
img = new ImageView(this); 
img.setImageBitmap(bitmap); 
*img.setTag(files[i].getPath())* 
img.setScaleType(ImageView.ScaleType.FIT_XY); 
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.FILL_PARENT)); 
img = null; 

現在,您可以撥打:

if (vf.getCurrentView().getTag().toString().equalsIgnoreCase(mPathImLookingFor)) { 
    // Do something 
}