显式动画setAnimationStyle(),我有哪些选择?我有、动画、setAnimationStyle

2023-09-06 11:46:06 作者:- 心也死,爱以决

我想尝试不同的动画风格,使用setAnimationStyle()一个弹出窗口,但我努力理解的文档。

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,说:当弹出出现和消失的动画风格来使用设置为-1为默认的动画,0表示没有动画,或者一个明确的动画资源标识符

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?

编辑:我目前的code让我的弹出窗口是像这样(简体):

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);
    }
  }
}

我现在把一个文件RES /动画/的test.xml如下:

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>

与pw.setAnimationStyle(android.R.style.Animation_Dialog)原code;正常工作,尽可能多的对话框出现了与标准的动画 - 但如果我换用pw.setAnimationStyle(R.anim.test)这条线;没有动画。我不知道为什么。

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.

推荐答案

这是工作的例子 setAnimationStyle()在我结束:

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

RES /动画/ 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 /动画/ 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>

布局/ 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 >

布局/ 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>

值/ 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>

值/ 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;
        }
    }
}

和在code只需添加您的动画文件,以风格为:

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>

在code:

and in code:

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

感谢和放大器;编码快乐!的

Thanks & Happy Coding!!!