3

我在RelativeLayout中有一個ImageView。 ImageView正在填充整個RelativeLayout。 RelativeLayout不能變大。使用動畫時Trespass ViewGroup的限制

我要讓使用ScaleAnimation的ImageView的更大的那樣:

final ScaleAnimation scaleAnimationGoBigger = new ScaleAnimation(1, 1.5f, 1, 1.5f,  Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5); 
scaleAnimationGoBigger.setDuration(1000); 
scaleAnimationGoBigger.setFillAfter(true); 
myImageView.startAnimation(scaleAnimationGoBigger); 

的RelativeLayout的的學邊界不允許顯示整個新的更大的ImageView,只顯示適合的RelativeLayout部分(使得人們看起來像一個縮放效果)。

所以我的問題是:有沒有辦法告訴一個ViewGroup內的視圖不遵守(以非法訪問)ViewGroup的邊界位置(至少在動畫期間)?

+0

同樣的問題。 ;( – Gavjr 2014-09-04 15:06:43

回答

1

有沒有辦法告訴ViewGroup中內的一個視圖不服從(以 侵入)的ViewGroup中的邊界的地方在於....

是。假設您在某個ViewGroup(viewGroupParent)中有一個View(myImageView)。剛纔打電話setClipChildren(false)

ViewGroup viewGroupParent = (ViewGroup) myImageView.getParent(); 
    viewGroupParent.setClipChildren(false); 

此處瞭解詳情:http://developer.android.com/reference/android/view/ViewGroup.html#attr_android:clipChildren

(在動畫至少)?

使用Animation.AnimationListener,乾脆,就應該是這個樣子:

final ViewGroup viewGroupParent = (ViewGroup) myImageView.getParent(); 
viewGroupParent.setClipChildren(false); 

final ScaleAnimation scaleAnimationGoBigger = new ScaleAnimation(1, 1.5f, 1, 1.5f,  Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5); 
scaleAnimationGoBigger.setDuration(1000); 
scaleAnimationGoBigger.setFillAfter(true); 
scaleAnimationGoBigger.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
      viewGroupParent.setClipChildren(false); 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      // uncomment here if you want to restore clip : viewGroupParent.setClipChildren(true); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      // do nothing 
     } 
    }); 
myImageView.startAnimation(scaleAnimationGoBigger); 

HTHS!

+0

謝謝,這解決了我的問題,但如果有一個解決方案,我可以告訴視圖不遵守其父視圖組邊界,而是告訴父母允許視圖這樣做,這主要是因爲可能會有更多而不是一個viewGroup,它會剪切我的視圖,強制我將「setClipChildren(false)」放到每個viewGroup中,以剪切我的視圖。 – 2014-09-05 13:02:03

+0

Android給出了這種開箱即用的方式。是你說的方式,但是你想要循環這個操作,然後在你創建的靜態util類中,這是相當容易的。另一種方法是創建視圖的副本並將其放入PopUpWindow類的實現中,可以放棄編寫這個實用程序和循環,但這將是另一個問題的答案;-)最好的運氣和最好的。 – petey 2014-09-05 13:40:28