安卓 实现一个加载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);
}
}
首先修改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);
}
}
相关文章推荐
- 安卓 使用animation-list实现图片的逐帧变换(加载框,刷新框)(19)
- 分享一个自己利用javascript中的window.setInterval()定时器实现页面背景图片变换的特效(同时淡入淡出效果)
- js实现一个长页面中的图片懒加载即滚动到其位置才加载
- 安卓中利用TranslateAnimation实现图片循环移动时候的出现的一个问题,在这里记一下
- 自定义控件,实现加载图片时透明变换
- 安卓异步加载图片(缩略图显示)的实现
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
- 安卓代码优化 使用ImageLoader实现图片异步加载
- js实现一个图片 懒加载插件
- 【安卓】使用多线程实现ListView中图片的异步加载
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站
- 使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
- 如何实现一个图片懒加载库
- 使用QT实现一个图像处理软件1 —— 图片的加载和显示
- 使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
- 安卓自定义View实现加载gif图片
- 尝试实现一个图片加载框架PicLoad
- qml-------------实现一个简单的图片加载程序
- 从零开始实现一个网络图片加载框架