2014-11-23 96 views
0

對不起,模糊的標題。我真的不能提出這個問題是幾句話。好的,讓我描述一下我想達到的目標。Android縮放視圖和重新排版

首先,我有一個包含兩個視圖的垂直LinearLayout。視圖A可見且儘可能大(匹配父項)。對於View BI,設置VIEW.GONE爲默認值。

然後,由某些事物觸發,視圖A將縮放爲其大小的一半。視圖B將通過設置VIEW.VISIBLE顯示。爲了使視圖A和視圖B具有相同的高度,我在xml中爲它們賦予了相同的權重。以下數字說明了我想要實現的內容。

figure

要縮放視圖A,我利用View.ScaleX(0.5F)和View.ScaleY(0.5F)的。實際上,我以動畫方式實現了縮放功能,並在EndAnimation回調中設置了視圖B可見性。

但視圖A和視圖B無法正確顯示。每個視圖的一半被未知的「白色塊」掩蓋。

而且我還檢查視圖A的高度寬度,在縮放之前和之後,它根本不會改變。

那麼有可能實現這樣的功能?

非常感謝。

+0

豈不是一個更好的主意,只是給他們相同的權重,然後隱藏和顯示B' B然後會迫使A縮小到分配的重量。 – Christoffer 2014-11-23 15:12:54

回答

0

想在顯示視圖B之前在視圖A上添加一個scaleY動畫嗎?這絕對有可能。我不確定你指的是什麼「白塊」。如果你想幫助調試,你應該給你一些代碼。

否則,你應該使用這樣一個一個ObjectAnimator:

ObjectAnimator animator = ObjectAnimator.ofFloat(viewA, "scaleY", 1f, 0.5f); 
animator.addListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd(Animator animation) { 
     viewB.setVisibility(View.VISIBLE); 
     // You can display the view b with an animation 
     ObjectAnimator.ofFloat(viewB, "alpha", 0f, 1f).start(); 

     // Remember to reset the scale factor since there will be a re-layout 
     viewA.setScaleY(1.0f); 
    } 
}); 
animator.start(); 
+0

感謝您的幫助。其實我想縮放視圖A爲顯示視圖B騰出空間。但是我發現,當我在視圖A上縮放比例時,它隻影響視圖A的外觀,但不影響它的確切大小。因此,當視圖B被設置爲可見時,它不顯示(如果我不分配權重)或與視圖A重疊(如果我分配相同的權重)。我認爲問題在於,縮放函數不能影響視圖的確切大小以及如何重新佈局父級(讓它知道確實有一定的視圖B空間)。我稍後會發布我的代碼和屏幕截圖。再次感謝。 – ChrisPlus 2014-11-24 02:39:43

+0

請注意比例尺動畫,它是一個「僅限繪製」動畫:它不關心視圖的佈局。它始終影響視圖,這意味着如果將scaleY設置爲50%,即使在佈局之後,它也會始終將其視圖顯示爲其高度的50%。這就是爲什麼你需要在動畫結束時重置它。 如果您將視圖設置爲1:1的重量,則它們應該具有完全相同的高度,當它們都可見並且scaleY爲1時。 開始將viewA縮小到50%的動畫是近似值,因爲您知道你總是佔據ViewGroup的一半。 – 2014-11-24 23:21:38

+0

爲它們設置動畫效果的更好方法是在繪製兩者之前(但在測量之後)將視圖B設置爲可見並在視圖A和視圖B(縮放視圖A和放大視圖B)上啓動scaleY動畫, ,使用getViewTreeObserver.addOnPreDrawListener。 – 2014-11-24 23:22:24