Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Explicit animations for setAnimationStyle(), what are my choices?

I would like to try out different animation styles for a popup window using setAnimationStyle(), but I am struggling to understand the documentation.

developer.android.com, says: "animation style to use when the popup appears and disappears. Set to -1 for the default animation, 0 for no animation, or a resource identifier for an explicit animation."

It does not give any examples, or tell me what choices of resource are available. I suspect the best animation for my purposes will be sliding in from the right... does that exist as an option? Are these things I can select from a list or do I have to somehow create my own?

EDIT: My current code for making my popup window is something like this (simplified):

public void completed_dialog()
{
  runOnUiThread(new Runnable()
  {
    public void run()
    {

      View layout = inflater.inflate(R.layout.endofgame, null, false);

      Button b1 = (Button) layout.findViewById(R.id.pu_menu);
      Button b2 = (Button) layout.findViewById(R.id.pu_repeat);
      Button b3 = (Button) layout.findViewById(R.id.pu_next);

      b1.setBackgroundResource(R.drawable.custom_menu_but);
      b2.setBackgroundResource(R.drawable.custom_repeat_but);
      b3.setBackgroundResource(R.drawable.custom_next_but);

      b1.setOnClickListener(menu_button_click_listener);
      b2.setOnClickListener(repeat_button_click_listener);
      b3.setOnClickListener(next_button_click_listener);

      final PopupWindow pw = new PopupWindow(layout, canvas_width, 
                                                       canvas_width /2,  true);

      pw.setAnimationStyle(android.R.style.Animation_Dialog);
      pw.showAtLocation(game_frame_layout, Gravity.CENTER, 0, 0);
    }
  }
}

I have now put the following in a file res/anim/test.xml :

<?xml version="1.0" encoding="utf-8"?>

    <set xmlns:android="http://schemas.android.com/apk/res/android">
            <scale
                    android:fromXScale="0.3" android:toXScale="1.0"
                    android:fromYScale="0.3" android:toYScale="1.0"
                    android:pivotX="0%" android:pivotY="0%"
                    android:duration="@android:integer/config_shortAnimTime"
            />
            <alpha
                    android:interpolator="@android:anim/decelerate_interpolator"
                    android:fromAlpha="0.0" android:toAlpha="1.0"
                    android:duration="@android:integer/config_shortAnimTime"
            />
    </set>

The original code with pw.setAnimationStyle(android.R.style.Animation_Dialog); worked fine, in as much as the dialog appeared with the standard animation - but if I swapped that line with pw.setAnimationStyle(R.anim.test); there is no animation. I have no idea why.

like image 988
Mick Avatar asked Mar 10 '12 17:03

Mick


1 Answers

this is working example of setAnimationStyle() on my end:

res/anim/in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <translate 
        android:fromYDelta="854" 
        android:toYDelta="0"
        android:duration="1000"/>
</set>

res/anim/out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <translate android:interpolator="@android:anim/decelerate_interpolator"
        android:fromYDelta="0"
        android:toYDelta="854" 
        android:duration="10000"
    />
</set>

layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/layout"
    >
    <Button
        android:id="@+id/btn_show"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="show"
        />
</RelativeLayout >

layout/popup.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#cccccc" 
    > 
    <Button 
        android:id="@+id/btn_dismiss"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="dismiss"/>
</LinearLayout>

values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="PopupAnimation" parent="android:Animation" mce_bogus="1">      
         <item name="android:windowEnterAnimation">@anim/in</item>  
        <item name="android:windowExitAnimation">@anim/out</item>  
    </style>  
</resources>

values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">Popupwindow</string>
</resources>

MainActivity.java :

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    boolean flag =false;
    PopupWindow popupWindow;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }
    public void init() {
        Button btn_show = (Button) findViewById(R.id.btn_show);
        LayoutInflater inflater = LayoutInflater.from(this);
        View layout = inflater.inflate(R.layout.popup, null);
        popupWindow =new PopupWindow(layout, LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT);
        Button btn_dismiss = (Button) layout.findViewById(R.id.btn_dismiss);
        btn_dismiss.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                openMenu();
            }
        });
        btn_show.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                openMenu();
            }
        });
    }

    public void btn_showOnClicked() {
        openMenu();
    }

    public void btn_dismissOnClicked() {
        openMenu();
    }

    public void openMenu() {
        if (!flag) {
            popupWindow.setAnimationStyle(R.style.PopupAnimation);
            popupWindow.showAtLocation(findViewById(R.id.btn_show), Gravity.NO_GRAVITY, 0, 0);
            popupWindow.setFocusable(true);
            popupWindow.update();
            flag =true;
        } else {
            popupWindow.dismiss();
            popupWindow.setFocusable(false);
            flag =false;
        }
    }
}

and in your code just add your anim file to style as:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="test" parent="android:Animation" mce_bogus="1">      
         <item name="android:windowEnterAnimation">@anim/test</item>  
    </style>  
</resources>

and in code:

pw.setAnimationStyle(android.R.style.test);

Thanks & Happy Coding!!!

like image 72
ρяσѕρєя K Avatar answered Oct 31 '22 01:10

ρяσѕρєя K