2017-07-16 39 views
0

我在我的activity_main.xml佈局中有一個RelativeLayout。我已經定義其寬度高度作爲分別250dp48dp如在我的XML片段所示的下方。如何使用ScaleAnimation在android中將佈局縮放到特定大小(不是相對大小)?

現在我想動畫(縮放)寬度從該值(默認值)48dp,(支點應該是右邊緣)。我試圖使用ScaleAnimation,ValueAnimation,ObjectAnimation這樣做,但似乎他們工作在相對值

如果可能,我想使用ScaleAnimation來做到這一點。

這是我的RelativeLayout:

<RelativeLayout 
    android:layout_width="250dp" 
    android:layout_height="48dp" 
    android:id="@+id/layout_1" 
    android:layout_below="@id/default_layout" 
    android:layout_centerHorizontal="true" 
    android:background="@drawable/round_corner_layout_1"> 


     ... 


</RelativeLayout> 

這是我scaleAnimate方法:

private void scaleAnimate(long startOffSet, int fromX, int fromY, int toX, int toY, int pivotTypeX, int pivotTypeY, float pivotX, float pivotY, int duration, Interpolator interpolator, final View... v){ 

    Animation animation = new ScaleAnimation(fromX, toX, fromY, toY, pivotTypeX, pivotX, pivotTypeY, pivotY); 
    animation.setDuration(duration); 
    animation.setFillAfter(true); 
    animation.setInterpolator(interpolator); 
    animation.setStartOffset(startOffSet); 

    for(View view : v){ 
     view.setVisibility(View.VISIBLE); 
     view.startAnimation(animation); 
    } 
} 

編輯:

這是我想動畫布局。我試圖創建一個圖像,下面鏈接,解釋我想要做的事情。佈局內

Layout Scaling Interpretation

意見將阿爾法動畫爲0(我可以完全阿爾法它的動畫沒有什麼問題有:d)。左邊是縮放後的佈局,右邊是縮放後的佈局。縮放後,圓角應該形成一個圓。這就是爲什麼高度和寬度都需要相同(48dp)。左(頂部和底部)角落都向右(頂部和底部)角落移動。右邊緣將保持靜止。右邊是樞軸。

對於支持不同分辨率的設備,可以將初始寬度和高度更改爲wrap_content。別擔心。但是在佈局動畫之後,高度和寬度需要相同,才能形成一個圓圈。

+0

爲什麼你需要使用特定的尺寸? Android支持超過10k設備與多個屏幕大小! –

+0

我編輯過的問題。我試圖解釋我究竟在做什麼:) –

回答

0

比例屬性通過乘以其原始大小來影響視圖的大小,因此它們不適合用於將動畫設置爲絕對大小,正如您找到的那樣。

相反,使用ValueAnimator結合AnimatorUpdateListener來設置視圖的寬度。

ValueAnimator anim = ValueAnimator.ofInt(v.getMeasuredWidth(), END_WIDTH); 
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator animator) { 
     ViewGroup.LayoutParams params = v.getLayoutParams(); 
     params.width = (int) animator.getAnimatedValue(); 
     v.setLayoutParams(params); 
    } 
}); 
... 
anim.start(); 
+0

我已經編輯了問題,能夠解釋我正在嘗試做什麼。希望我的查詢會很清楚:) –

+0

即使在編輯之後,我相信我上面的答案就是你要找的。 –

相關問題