您的位置:首页 > 移动开发 > Android开发

安卓 实现一个加载Dialog 配合19的图片逐帧变换(20)

2018-03-20 11:39 253 查看
我们在很多地方都会遇到正在加载中的载入框,其实这个载入框我们可以通过自己继承自Dialog来自己实现一个载入框,并且实现其中逻辑来完成。
首先修改style.xml,为MyDialog写一个style样式: <style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否悬浮在Activity上-->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
<item name="android:backgroundDimAmount">0.6</item><!--灰度-->

<!--<item name="android:windowContentOverlay">@null</item><!– 对话框是否有遮盖 –>-->
<!--<item name="android:windowAnimationStyle">@style/dialog_animation</item><!– 弹出或者进入时的动画效果 –>-->
<!--<item name="android:colorBackgroundCacheHint">@null</item><!– 背景缓存颜色 –>-->
</style>接着实现一个MyDialog类:public class MyDialog extends Dialog {

private Context context;
private static MyDialog dialog;
private ImageView animation_image;
private AnimationDrawable animationDrawable;

public MyDialog(@NonNull Context context) {
super(context);
this.context = context;
}

public MyDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
this.context = context;
}

protected MyDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
this.context = context;
}

//把MyDialog的构造方法在这个函数内实现,对于其他类使用该类时可以直接实现此函数
public static MyDialog showDialog(Context context){
//这里通过使用第二个构造方法来将style联系起来(layout参考文章19)
dialog = new MyDialog(context, R.style.MyDialog);
dialog.setContentView(R.layout.animation_layout);
//点击加载框外的其余位置不能退出加载框,点击返回键可以退出
//dialog.setCanceledOnTouchOutside(false);
//点击加载框外的其余位置不能退出加载框,点击返回键也不可以退出
dialog.setCancelable(false);
return dialog;
}

//真正的窗体完成初始化可见获取焦点可交互是在onWindowFocusChanged()方法被执行时
//关于Activity的一整个显示过程可以自行上网百度一下(onCreate->onStart->onResume->onWindowFocusChanged等等)
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus && dialog != null){
//实现滚动的加载框图片(这一块代码参考文章19)
animation_image = findViewById(R.id.animation1);
animationDrawable = (AnimationDrawable) animation_image.getDrawable();
animationDrawable.start();
}
}
}实现一个Activity:public class MyDialogActivity extends AppCompatActivity {

MyDialog myDialog;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_dialog_layout);

myDialog = MyDialog.showDialog(MyDialogActivity.this);
myDialog.show();
// //两秒后退出加载
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// myDialog.dismiss();
// }
// }, 2000);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android
相关文章推荐