2011-08-02 73 views

回答

0

好的,我們走吧!擴展您的Gallery獲取訪問的

protected boolean getChildStaticTransformation(View child, Transformation t) {} 

在那裏,您可以訪問你的圖片庫中顯示每個視圖。 從現在開始你可以做2件事。

  1. 計數所有獨特孩子的(getChildStaticTransformation可以稱爲例如觸摸事件等,之所以獨特的兒童的檢測的IS必須多次)。 注意,此方法返回由圖庫填充的子元素。性能問題中,畫廊填充了頂部1和底部+ 1個孩子。有時是+2 -2或+ n -n(取決於子寬度,原因是水平滾動小部件)。這樣,可能不是你需要的原因並不總是準確的顯示在畫廊上的孩子。
  2. 對於每個孩子,檢查.getLeft和.getRight是否位於畫廊邊界內。因此,如果孩子的getLeft位於畫廊內部,並且其他孩子的getRight也位於畫廊中,則您處於中間滾動狀態。 這是你需要的。
  3. 如果你(在一次只能顯示一個)FILL_PARENT孩子,那麼你可以看到,如果畫廊滾動flinging.Then你是在滾動中旬至畫廊「推出」的setOnItemSelectedListener() 。爲了這個工作,你必須設置Call​​backDuringFling(true);
+0

您的回答引導我走向正確的方向。由於我只有1個視圖可見,2箇中間滾動時,我可以使用'getChildCount()',如果它是2則滾動,否則它是1.謝謝! –

+0

關於方法#2,我認爲它被稱爲太多次了,並且檢查使可見項目計數器變爲負值。也許檢查是不正確的:boolean isVisible = right> = 0 && right = 0 && left

0

我能想到的最好的是設置AnimationListener您的畫廊是這樣的:

gallery.setLayoutAnimationListener(new AnimationListener() { 

    @Override 
    public void onAnimationStart(Animation animation) { 
     //schedule timer to execute halfway through animation here 

    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     // TODO Auto-generated method stub 

    } 
}); 

並設置有gallery.setAnimationDuration(durationInMilliseconds)動畫持續時間;

現在你知道什麼時候動畫開始,你知道需要多長時間。有了這些信息,您可以安排計時器在動畫中途執行代碼,這應該是您的圖庫同時顯示兩個視圖時。

雖然這似乎是一個非常困難的方法,所以給別人時間提供更好的建議。

相關問題