1.继承dialog
2.一个主题样式文件
3.一个布局文件来加载
4.一个anim文件
1.自定义Dialog
public class MyDialog extends Dialog {
ImageView imageView;
AnimationDrawable anim;
Context context;
public MyDialog(Context context,int style) {
super(context, style);//设置样式
this.context = context;
View view = LayoutInflater.from(context).inflate(
R.layout.dt_now_page_loading, null);
imageView = (ImageView) view.findViewById(R.id.loding_img);
anim = (AnimationDrawable) context.getResources().getDrawable(R.drawable.loading_drawable);
imageView.setImageDrawable(anim);
setCancelable(true);
setCanceledOnTouchOutside(true);
// dialog.setCancelable(false); dialog弹出后会点击屏幕或物理返回键,dialog不消失
// dialog.setCanceledOnTouchOutside(false); dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失
//
setAttributes();
setContentView(view);//加载view到dialog上
}
public void setAttributes(){
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.width = dp2px(context,60);
layoutParams.height = dp2px(context,60);
// layoutParams.alpha = 1;//alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明,自身不可见 (dialog自身的透明度)
// layoutParams.dimAmount = 0;//dialog所在窗体的背景 dimAmount在0.0f和1.0f之间,0.0f完全不暗,即背景是可见的 ,1.0f时候,背景全部变黑暗
getWindow().setWindowAnimations(R.style.Show_Dismiss_dialog);//设置dialog所在窗体的动画(即show和dismiss的动画效果)
}
public void startAnimation() {
if (!anim.isRunning()) {
anim.start();
}
}
public void stopAnimation(){
if(anim.isRunning()){
anim.stop();
}
}
public static int dp2px(Context context, int dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
2.使用Dialog
public class MainActivity extends AppCompatActivity {
MyDialog myDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDialog = new MyDialog(this,R.style.DT_DIALOG_Translucent);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
}
private void showDialog(){
if(myDialog!=null) {
myDialog.startAnimation();
if (myDialog.isShowing()) {
return;
}
if (!isFinishing()) {
myDialog.show();
}
}
}
private void closeDialog(){
if(myDialog!=null) {
myDialog.stopAnimation();
if (!myDialog.isShowing()) {
return;
}
if (!isFinishing()) {
myDialog.dismiss();
}
}
}
}
dialog样式和dialog窗体动画
<!--dialog的样式-->
<style name="DT_DIALOG_Translucent" parent="android:style/Theme.Dialog">
<item name="android:windowIsFloating">false</item><!--是否浮在activity上-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item><!--是否有边框-->
<item name="android:background">#00000000</item><!--背景透明-->
<item name="android:windowBackground">@android:color/transparent</item><!--窗体背景透明-->
</style>
<!--dialog所在窗体的显示隐藏动画-->
<style name="Show_Dismiss_dialog" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dt_dialog_enter_anim</item>
<item name="android:windowExitAnimation">@anim/dt_dialog_exit_anim</item>
</style>
</resources>
图片动画 和窗体动画的具体实现
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" >
<!-- 定义一个动画帧,Drawable为img0,持续时间20毫秒 -->
<item android:drawable="@mipmap/loading_pic_01" android:duration="50" />
<item android:drawable="@mipmap/loading_pic_02" android:duration="50" />
<item android:drawable="@mipmap/loading_pic_03" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_04" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_05" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_06" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_07" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_08" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_09" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_10" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_11" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_12" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_13" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_14" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_15" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_16" android:duration="100" />
<item android:drawable="@mipmap/loading_pic_17" android:duration="50" />
<item android:drawable="@mipmap/loading_pic_18" android:duration="50" />
<item android:drawable="@mipmap/loading_pic_19" android:duration="50" />
</animation-list>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="234" >
</scale>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="234" />
</set>