2014-06-27 48 views
1

我想要做的是同時縮放和翻譯基於ImageView時,用戶接觸是。 ImageView的最終位置和大小應該等於目標。同時縮放和翻譯基於目標的ImageView

下面是每個應執行此操作的ImageView附加的OnClickListener的Snipper。新的位置和大小從ivYou獲得,這也是一個ImageView。

@Override 
    public void onClick(View v) { 
     // Create animations 
     int[] from = new int[2]; 
     int[] to = new int[2]; 
     //v.getLocationInWindow(from); 
     v.getLocationOnScreen(from); 
     //ivYou.getLocationInWindow(to); 
     ivYou.getLocationOnScreen(to); 
     TranslateAnimation transAnim = new TranslateAnimation(0, to[0] - from[0], 0, to[1] - from[0]); 

     float factorX = ivYou.getWidth()/v.getWidth(); 
     float factorY = ivYou.getHeight()/v.getHeight(); 
     ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, factorX, 1.0f, factorY); 

     // Create animation set 
     AnimationSet set = new AnimationSet(true); 
     set.setFillAfter(true); 
     set.setDuration(ANIM_DURATION); 
     set.addAnimation(transAnim); 
     set.addAnimation(scaleAnim); 

     // Start animations and disable click listener 
     v.startAnimation(set); 
     v.setOnClickListener(null); 
    } 

ANIM_DURATION是2000毫秒。

當我運行這段代碼時,最奇怪的事情發生了。 ImageView變成半圈,然後變小。當我沒有將ScaleAnimator添加到動畫集​​時,ImageView會移動到新的位置。但是,這個新位置對於每個ImageView都不相同。請注意,帶有此OnClickListener的ImageView具有不同的初始位置。

任何幫助和反饋,非常感謝!

+0

您必須在圖像視圖的中心有縮放動畫的關鍵點。然後,您必須在平移動畫的計算中包含偏移量(由於比例)。我沒有工作代碼,你必須自己考慮一下:| – MalaKa

+0

向ScaleAnimation添加了「ScaleAnimation.RELATIVE_TO_SELF,.5f,ScaleAnimation.RELATIVE_TO_SELF,.5f」。沒有那個運氣。 –

+0

是的,現在有什麼問題?翻譯動畫無法正常工作? – MalaKa

回答

0

我能夠通過將目標視圖包裝到佈局組中並將它們分開製作動畫來實現此動畫。

換句話說,我翻譯包裝佈局,並縮放子視圖。同時翻譯和縮放相同視圖似乎總會導致意想不到的動畫軌跡,因爲縮放使用了翻譯動畫正在使用的座標系。

translateTarget.animate().x(deltaX).y(deltaY).setDuration(1000); 
scaleTarget.animate().scaleX(0.01f).scaleY(0.01f).setDuration(1000) 
0

你試過這個構造函數嗎? ScaleAnimation(float從X,float toX,float fromY,float toY,float pivotX,float pivotY)並使pivotX爲widthofimageview/2,pivotY爲heightofimageview/2爲中心。這是我在翻譯比例尺動畫中使用的。