【问题标题】:Android PopupWindow Custom Java AnimationAndroid PopupWindow 自定义 Java 动画
【发布时间】:2016-01-01 00:14:42
【问题描述】:

我想使用来自this answer 的展开/折叠动画来显示/隐藏弹出窗口。 我可以通过将动画应用于弹出视图来使用动画,弹出视图是弹出窗口内的视图。我现在面临的问题是,当用户在弹出窗口之外触摸时,弹出窗口会自动关闭,并且在关闭弹出窗口之前我无法显示折叠动画。

这是我写的代码:

View popupView = View.inflate(context,R.layout.popuplayout, null);
popup = new PopupWindow(popupView,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
popup.setAnimationStyle(0);
popup.setOutsideTouchable(true);
popup.setFocusable(true);
popup.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popup.showAsDropDown(anchor, 0, 0);
popup.setBackgroundDrawable(null);
popupView.post(new Runnable() {
    @Override
    public void run() {
            expand(popupView);
    }
});
.
.
.
private void expand(final View v) {
    final int targetHeight = ((View)v.getParent()).getHeight();
    // Older versions of android (pre API 21) cancel animations for views with a height of 0.
    v.getLayoutParams().height = 1;
    v.setVisibility(View.VISIBLE);
    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            v.getLayoutParams().height = interpolatedTime == 1
                    ? LayoutParams.MATCH_PARENT
                    : (int)(targetHeight * interpolatedTime);
            v.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };
    a.setDuration(200);
    v.startAnimation(a);
}

我想知道是否有一种方法可以在没有 xml 样式的情况下在触摸外部时关闭弹出窗口之前显示动画,或者使用 xml 动画实现给定的动画。

【问题讨论】:

    标签: android animation android-popupwindow


    【解决方案1】:
    public class PopupWindowCustom extends PopupWindow{
       public dismiss(){
         View view = getCustomView();
         expand(view);
         super.dismiss();
       }
    
       private expand(View view){
         //do some anim
       }
    }
    

    【讨论】:

    • 不完全是我想要的,但得到了这样做的想法:) 谢谢
    【解决方案2】:

    你应该这样做,

    1)创建两组不同的动画。

    说,popup_show.xmlpopup_hide.xml 并将其添加到您必须在 res 中创建的 anim 文件夹中 文件夹。

    2)现在在 values 文件夹中创建一个名为 styles.xml 的 xml 并像这样添加这些动画,

    <style name="Animation">
        <item name="android:windowEnterAnimation">@anim/popup_show</item>
        <item name="android:windowExitAnimation">@anim/popup_hide</item>
    </style>
    

    3)现在将此样式设置为您的 PopupWindow 动画,

     popup.setAnimationStyle(R.style.Animation);
    

    现在它会自动检测窗口进入和退出并提供所需的动画。 根据 Andro Selva 的说法。

    【讨论】:

    • 我认为它没有用,因为没有办法在xml动画中实现我的自定义动画。所以没有办法创建可以在不缩放的情况下展开/折叠视图的 popup_show 和 popup_hide 动画。顺便说一句,谢谢你的回答。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多