Android 尝试创建循环显示时出错:IllegalStateException:无法在分离的视图上启动此动画
所以,我尝试在TextView上的API级别21上创建一个循环显示,但我一直遇到这个错误。起初我认为这与我尝试的片段的生命周期有关,但后来我在一个活动中尝试了同样的事情,但仍然不起作用 代码如下:Android 尝试创建循环显示时出错:IllegalStateException:无法在分离的视图上启动此动画,android,android-5.0-lollipop,Android,Android 5.0 Lollipop,所以,我尝试在TextView上的API级别21上创建一个循环显示,但我一直遇到这个错误。起初我认为这与我尝试的片段的生命周期有关,但后来我在一个活动中尝试了同样的事情,但仍然不起作用 代码如下: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window w = getWindow();
w.setFlags(
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
w.setStatusBarColor(Color.parseColor("#0277bd"));
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.text);
int a = (tv.getLeft() + tv.getRight()) / 2;
int b = (tv.getTop() + tv.getBottom()) / 2;
int radius = tv.getWidth();
Animator anim = ViewAnimationUtils.createCircularReveal(tv, a, b, 0, radius);
anim.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
}
现在还为时过早,所以我真的找不到任何关于这个问题的答案。有什么想法吗?由于您传入的视图尚未在屏幕上进行测量和布局,因此出现了错误
ViewAnimationUtils.createCircularReveal
需要测量目标视图以计算动画。您还会发现变量a
和b
始终为0
如果要进行实验,请创建动画并在按钮单击侦听器中启动它。下面是一个使用您的代码的示例:
Button button = (Button) findViewById(R.id.your_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) findViewById(R.id.text);
int a = (tv.getLeft() + tv.getRight()) / 2;
int b = (tv.getTop() + tv.getBottom()) / 2;
int radius = tv.getWidth();
Animator anim = ViewAnimationUtils.createCircularReveal(tv, a, b, 0, radius);
anim.start();
}
});
或者你可以这样做
tv.postDelayed(new Runnable() {
@Override
public void run() {
//start your animation here
}
}, 1000);
tv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
tv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
Animator anim = ViewAnimationUtils.createCircularReveal(tv, a, b, 0, radius);
anim.start();
}
});
或者你可以这样做
tv.postDelayed(new Runnable() {
@Override
public void run() {
//start your animation here
}
}, 1000);
tv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
tv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
Animator anim = ViewAnimationUtils.createCircularReveal(tv, a, b, 0, radius);
anim.start();
}
});
tv.getViewTreeObserver().addOnGlobalYoutListener(新的ViewTreeObserver.OnGlobalYoutListener()){
@凌驾
公共图书馆{
if(android.os.Build.VERSION.SDK\u INT
添加GlobalLayoutListener以等待视图膨胀对我有效。您可以使用
Runnable
来制作动画。Runnable
将在视图创建后运行。不需要延迟
view.post(new Runnable()
{
@Override
public void run(){
//create your anim here
}
});
这是否有效,因为它给了时间将视图附加到活动?是的,就像Rlay3一样mentioned@TimoBähr您可以将您的日志发布在这里的评论中吗。