CircularReveal IlegalStateException - PullRequest
       67

CircularReveal IlegalStateException

0 голосов
/ 01 мая 2018

У меня есть кнопка, которая при нажатии должна выполнять анимацию раскрытия. Я получаю исключение Незаконное состояние при нажатии. Оно говорит: «Не удается запустить этот аниматор в отдельном представлении!». Не знаю, что вызвало Я ссылался на подобные проблемы, но не помог мне. Может ли кто-нибудь помочь мне?

alert_lyt.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="A1"
android:textSize="30sp"
android:gravity="center"
android:textColor="#ffffff"
android:id="@+id/button"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="A1"
android:textSize="30sp"
android:gravity="center"
android:textColor="#ffffff"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="A1"
android:textColor="#ffffff"
android:textSize="30sp"
android:gravity="center"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="A1"
android:textColor="#ffffff"
android:textSize="30sp"
android:gravity="center"
/>

КОД:

 initialRadius=0;    
 view=LayoutInflater.from(getApplicationContext()).
 inflate(R.layout.alert_lyt,null);
 centerX=button.getWidth();
 centerY=button.getHeight();
 finalRadius= (int) Math.hypot(view.getWidth(),view.getHeight()); 
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
 {                         
 Animator animator=ViewAnimationUtils.
 createCircularReveal(view,centerX,centerY,initialRadius,finalRadius);
 animator.setDuration(1000);
 animator.start();

Исключение:

java.lang.IllegalStateException: Cannot start this animator on a detached view!
        at android.view.RenderNode.addAnimator(RenderNode.java:863)
        at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300)
        at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282)
        at android.animation.RevealAnimator.<init>(RevealAnimator.java:37)
        at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:55)
        at com.globemaster.systemwindows.Splash$1.onClick(Splash.java:51)
        at android.view.View.performClick(View.java:5716)
        at android.widget.TextView.performClick(TextView.java:10926)
        at android.view.View$PerformClick.run(View.java:22596)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

1 Ответ

0 голосов
/ 01 мая 2018

Проблема в том, что ваш view не привязан ни к чему и не является частью какого-либо действия или чего-либо, связанного с макетом экрана

// independent of any layout
view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.alert_lyt,null);

так отсюда и проблема, при желании можно сделать

 youAlertDiaogInstance.setContentView(view);

согласно вашему комментарию

Нет alerttdialog. Я просто дал имя макета alert_lyt.xml:

затем используйте

view=findViewById(R.layout.container);

где контейнер - это идентификатор корневого макета как

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#000000"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content">... </LinearLayout>
...