我想在对话框中显示动画。
当对话框打开动画开始时,我只想要动画和文字"正在加载......"没有标题,按钮或背景的对话框,但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"/>
答案 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");
}
}
}
结果是:
另一种方法是使用过时的Dialog,设置自己的布局,主题(如此dialog transparent background)并创建一些包装类来控制动画。这很容易出错,因为代码结构不清晰,Resume / Pause可能存在一些问题。我建议先使用。