2013-04-25 46 views
4

我想將ScaleAnimation應用到View,但我有一個非傳統要求:我只想縮放視圖的一個非常特定的區域。拉伸/縮放視圖的特定區域/位圖

使用現有的ScaleAnimation class I可以輕鬆均勻地縮放視圖。我還可以設置一個關於哪個縮放視圖的樞軸點。下面是一個例子:

smiley scaled from bottom

這是直截了當的。不過,我想實現以下,這從(在笑臉的中間或在此情況下一個小的水平矩形)僅縮放一個特定區域的圖的結果:

smiley with specific region scaled

我周圍的源挖對於ScaleAnimation代碼,下面的函數似乎是負責縮放:

protected void applyTransformation(float interpolatedTime, Transformation t) { 
    float sx = 1.0f; 
    float sy = 1.0f; 

    if (mFromX != 1.0f || mToX != 1.0f) { 
     sx = mFromX + ((mToX - mFromX) * interpolatedTime); 
    } 
    if (mFromY != 1.0f || mToY != 1.0f) { 
     sy = mFromY + ((mToY - mFromY) * interpolatedTime); 
    } 

    if (mPivotX == 0 && mPivotY == 0) { 
     t.getMatrix().setScale(sx, sy); 
    } else { 
     t.getMatrix().setScale(sx, sy, mPivotX, mPivotY); 
    } 
} 

由於此功能只是將縮放操作的矩陣,我想有某種矩陣運算的,我可以用它來寫一個自定義的尺度動畫,但我的線性代數技巧是缺乏的NG。解決這個問題的辦法可能要簡單得多,因爲看起來好像其他人會遇到這個問題,但我一直沒有找到任何解決辦法。提前致謝。

+0

你找到了嗎?分享它。 – 2015-09-11 03:59:19

回答

1

矩陣轉換整個位圖。您無法使用單個矩陣縮放區域。

+0

所以,這不能用矩陣來完成。也許還有一種方法可以在android中進行這種轉換? – 2013-04-26 06:37:57

+1

這取決於你想要做什麼。舉個例子,你可以使用9-png來定義哪個區域可以拉伸,哪些不能。加載9-png作爲Drawable,用它填充視圖,而不是縮放動畫,爲視圖大小添加動畫。還有其他的方法,你可以將你的圖片剪切成3張圖片,中間是中間的薄片,然後在中間有縮放動畫,更多的頂部和底部與中間大小相匹配。這取決於你需要做什麼。如果僅僅是一個例子,我假設這個笑臉的例子,而不是你真正需要的 – yoah 2013-04-26 07:31:04

+0

是的,我想我可能會嘗試動畫視圖大小!將其添加到您的答案中,因爲它似乎是在這個時間點解決問題的正確方法。 – 2013-04-26 19:43:52