how to make animation for popup window in android

后端 未结 4 1413
挽巷
挽巷 2020-12-23 19:26

I hava a popup window in my application, its appears when some button clicked I want to set fade in animation to this window, I put the xml file in \"res/anim\" folder and s

相关标签:
4条回答
  • 2020-12-23 20:02

    I think the problem is you have provided only one set of animation style. But actually a PopupWindow requires two animations. One will be used by it when window is shown and other one to hide the window.

    This is how you should do it,

    1) Create Two Different set of animations.

    say, popup_show.xml and popup_hide.xml and add it to your anim folder which you have to create inside res folder.

    2) Now inside values folder create a xml called styles.xml and add these animations to it like this,

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

    3) Now set this style to your PopupWindow animation,

     popup.setAnimationStyle(R.style.Animation);
    

    Now it automatically detects window enter and exit and provides with the required animation.

    0 讨论(0)
  • 2020-12-23 20:04

    The PopupWindow custom layout is more convenient, and the display position is freedom there is not any restricted. Use Below code and enjoy animation. In this animation use bottom slide in and slide out but you can change only slide in/out animation and animate any where in your app and one thing more according to your animation, you must to change your Gravity ->> BOTTOM, TOP etc.

    anim resource folder:

    1.slide_in_bottom.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false"
        >
    
      <translate
          android:duration="@integer/dialogplus_animation_default_duration"
          android:fromXDelta="0%"
          android:fromYDelta="100%"
          android:toXDelta="0%"
          android:toYDelta="0%"
          />
    </set>
    

    2.slide_out_bottom.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false"
        >
    
      <translate
          android:duration="@integer/dialogplus_animation_default_duration"
          android:fromXDelta="0%"
          android:fromYDelta="0%"
          android:toXDelta="0%"
          android:toYDelta="100%"
          />
    </set>
    

    Style:

    <style name="popup_window_animation">
            <item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
            <item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
        </style>
    

    Method:

     private PopupWindow showOptions(Context mcon){
            try{
                LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                View layout = inflater.inflate(R.layout.popup_option_documents_type,null);
                PopupWindow optionspu = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                optionspu.setAnimationStyle(R.style.popup_window_animation);
                optionspu.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                optionspu.setFocusable(true);
                optionspu.setOutsideTouchable(true);
                optionspu.update(0, 0, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                optionspu.showAtLocation(layout, Gravity.BOTTOM, 0, 0);
    
                return optionspu;
            }
            catch (Exception e){e.printStackTrace();
                return null;}
        }
    
    0 讨论(0)
  • 2020-12-23 20:13

    This might be a bit late but the reason why the animation did not show is because you are showing the popupwindow before you set up your animation.

    optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
    optionspu.setAnimationStyle(R.anim.myanim);
    

    Reverse the two lines and you will see the animation:

    optionspu.setAnimationStyle(R.anim.myanim);
    optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
    
    0 讨论(0)
  • 2020-12-23 20:21

    i am using a popup animation with this code:

    // Creating the PopupWindow
           layoutInflater = (LayoutInflater)     getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
           inflatedLayoutView = layoutInflater.inflate(R.layout.packages_popup,null);
         inflatedLayoutView.setAnimation(AnimationUtils.loadAnimation(this, R.animator.popupanim)
    
    
        popup_l = new PopupWindow(inflatedLayoutView);
    
       popup_l.setWidth(FrameLayout.LayoutParams.WRAP_CONTENT);
       popup_l.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);     
       popup_l.setFocusable(true);
       // Clear the default translucent background
       popup_l.setBackgroundDrawable(new BitmapDrawable());       
    
       popup_l.showAtLocation(parent, Gravity.CENTER, 0 , 0);   
    
       popup_l.setOutsideTouchable(false);
    

    located in /res/animator/popupanim.xml (popupanim.xml) the animation code is:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <alpha android:fromAlpha="0.0"
            android:toAlpha="1.0" 
            android:interpolator="@android:anim/accelerate_interpolator" 
            android:duration="500"
            android:repeatCount="0"/>
    </set>
    
    0 讨论(0)
提交回复
热议问题