如何在对话框android中显示动画

时间:2015-03-26 18:57:35

标签: android dialog android-animation

我想在对话框中显示动画。

当对话框打开动画开始时,我只想要动画和文字"正在加载......"没有标题,按钮或背景的对话框,但alpha黑色到向后布局。

我的布局代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff111214">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">
    <ImageView
        android:id="@+id/loader_image"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_centerHorizontal="true"
        android:src="@drawable/loader"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/wait"
        android:layout_below="@id/loader_image"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="13dp"
        android:textColor="#ffffff"/>
    </RelativeLayout>
</RelativeLayout>

我的动画代码:

    <rotate android:duration="500"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="55"
    android:repeatMode="restart"
    android:startOffset="0"
    android:toDegrees="360"/>

1 个答案:

答案 0 :(得分:0)

正确的方法是使用DialogFragment(支持库中也有一个,即使你想支持旧目标,也不应该是不可能的)。 以下是快速示例:

public class ProgressDialogFragment extends DialogFragment {

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.fragment_progress_dialog, container, false);

        return v;
    }

    @Override
    public void onResume() {
        super.onResume();

        final View progressItem = getView().findViewById(R.id.loader_image);

        progressItem.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.rotation));
    }

    @Override
    public void onPause() {
        super.onPause();

        final View progressItem = getView().findViewById(R.id.loader_image);

        progressItem.clearAnimation();
    }
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#88111214">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">
        <ImageView
            android:id="@+id/loader_image"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:layout_centerHorizontal="true"
            android:src="@android:drawable/ic_delete"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/wait"
            android:layout_below="@id/loader_image"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="13dp"
            android:textColor="#ffffff"/>
    </RelativeLayout>
</RelativeLayout>

的活动:

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        if (savedInstanceState == null) {
            final ProgressDialogFragment dialogFragment = new ProgressDialogFragment();

            dialogFragment.show(getFragmentManager(), "ProgressDialog");
        }
    }
}

结果是:

enter image description here

另一种方法是使用过时的Dialog,设置自己的布局,主题(如此dialog transparent background)并创建一些包装类来控制动画。这很容易出错,因为代码结构不清晰,Resume / Pause可能存在一些问题。我建议先使用。