3

我在 RelativeLayout 中有一个 ImageView。ImageView 正在填充整个 RelativeLayout。RelativeLayout 不能变大。

我想像这样使用 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 内的 View 不遵守(侵入)它所在的 ViewGroup 的边界(至少在动画期间)?

4

1 回答 1

1

有没有办法告诉 ViewGroup 内的 View 不遵守(侵入)它所在的 ViewGroup 的边界......

是的。假设您myImageView在某个 ViewGroup ( ) 中有一个 View ( viewGroupParent)。刚打电话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);

高温高压!

于 2014-09-04T14:29:10.210 回答