由於您使用API11,請使用Animator API。所有視圖現在都具有相應的setter和getter屬性。到視圖向左移動超出範圍,獲得屏幕的寬度然後做:
View viewToShiftOut = getOutView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
outAnim.setDuration(1000);
outAnim.start();
這將轉向的視圖,它完全是內容在屏幕的1秒(1000毫秒)的持續時間。在它的地方轉移一個做到這一點:
View viewToShiftIn = getInView();
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "x", widthOfScreen, 0);
inAnim.setDuration(1000);
inAnim.start();
的所有屬性,可點擊區域等將遵循視圖,所以你當動畫完成來完成。你可以像這樣在一起,它們的動畫:
View viewToShiftOut = getOutView();
View viewToShiftIn = getInView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", widthOfScreen, 0);
outAnim.setDuration(1000);
inAnim.setDuration(1000);
outAnim.start();
inAnim.start();
Blog post
編輯:我注意到你想只用1/3的一個視圖切換,這樣你就可以得到的像素量widthOfScreen/3
轉向各。編輯2:另一個優點是你可以使用它與硬件加速沒有大多數3.0+平板電腦有麻煩。
是的,這就是我正在做的。在調用view.layout(new coords)之後,儘管視圖移動到了正確的位置(這也需要x上的負邊距),但一段時間後系統再次調用佈局,並且視圖恢復到原位。我嘗試了各種確保這種情況發生的方法,我擴展了佈局並更改了佈局(r,t,l,b)中的值以反映正確的位置,而這完全沒有任何影響。 – totem 2012-04-17 18:46:08
你能發佈你的代碼嗎?我不清楚你指的是什麼。 – 2012-04-17 19:05:02