1. 程式人生 > >【android動畫開源庫】使用ObjectAnimator後按鈕等無法互動問題

【android動畫開源庫】使用ObjectAnimator後按鈕等無法互動問題

在使用nineoldandroids的ObjectAnimator後發現按鈕無法互動了,

去github的issue查了下,作者有提到android 3.0前的api只是渲染到了新的位置,實際位置並沒有發生改變,

也就是說按鈕還是在原來的地方

作者花了1天時間嘗試過3.0前的版本改變實質位置,但是需要侵入某些layout函式,

但是過於複雜,違背了他只是相容的本意,最重要的是沒有報酬,所以他放棄了

那麼如何解決這個問題呢?

在stackoverflow裡查詢了下,很多人提到在動畫結束的時候把view通過setMargins方式更新到新的位置

我嘗試了下發現改變後requestLayout後渲染的影象仍然沒有變化,

掙扎了很久想起有ValueAnimator,最後決定直接用ValueAnimator做動畫

程式碼片段如下

ValueAnimator anim = ValueAnimator.ofInt(-200,0);
anim.addUpdateListener(new AnimatorUpdateListener() {
			
	@Override
	public void onAnimationUpdate(ValueAnimator animation) {
		FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) inputArea.getLayoutParams();
		params.bottomMargin = (Integer) animation.getAnimatedValue();
		inputArea.setLayoutParams(params);
	}
});
anim.start();
注意:如果父容器使用FrameLayout,一定要在自身定義android:layout_gravity標籤,這樣margin才有效果