我的代码来自provides: [ MdDialogRef ]
' MainActivity
,所以当我按下后退按钮时,会有一个小动画。
在onBackPressed
中只有两行:
onBackPressed
这很好用。
现在在@Override
public void onBackPressed() {
dialog = new Dialog(MainActivity.this);
new animationAsyncTask().execute();
}
的同一活动中,我尝试将其调用,因此我从onCreate
删除了以上两行并在onBackPressed
中调用了它们:
onCreate
然后有一个例外:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dialog = new Dialog(MainActivity.this);
new animationAsyncTask().execute();
}
使用空指针。
我无法弄清楚的是,我没有改变任何内容,但它在error java.lang.RuntimeException: An error occured while executing doInBackground()
中运行良好,但在onBackPressed
中运行良好。
onCreate
答案 0 :(得分:0)
所以这是我的猜测。
你的动画表演是某种BLUR效果。因为android没有像iOS那样的功能。许多程序员试图模仿捕获屏幕截图的效果,然后将模糊效果应用于捕获的实际图像。
因此可能猜测您是在进行屏幕捕获的方式,还是在onCreate期间屏幕未显示以及onStart导致错误的事实。
如果你想证明它只是在调用它之前使用某种延迟"动画"查找CountDownTimer或使用FULLSCREEN模板在android studio中创建一个新项目,并检查它如何延迟执行代码隐藏UI并在项目中使用它。
祝你好运。答案 1 :(得分:0)
我有个建议,
如果它被调用onBackPressed
而不是onCreate
它的变化很大,那是因为你的进程仍在加载..所以@Gatunox建议你需要等待并在活动准备就绪后执行!
你可以试试这个
使用AsyncTask
并显示等待或等等。当它加载时显示你的动画。
在AsyncTask
onCreate
new waitTillYouLoadData().execute();
希望它有所帮助!
private class waitTillYouLoadData extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(MainActivity.this);
protected void onPreExecute() {
this.dialog.setMessage(getResources().getString(
R.string.plase_wait));
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
try {
return true;
} catch (Exception e) {
Log.e("tag", "error", e);
return false;
}
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (success) {
// ------- HERE YOU CAN CALL YOU ANIMATION -----//
}
}
}
答案 2 :(得分:0)
你没有在AsyncTask
发布你正在做的事情,但看起来你可能需要等到画出布局,使用ViewTreeObserver
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewTreeObserver vto = getWindow().getDecorView().getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
dialog = new Dialog(MainActivity.this);
new animationAsyncTask().execute();
getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
如果您使用&lt;
,则需要一些额外的逻辑来删除。 API 16。