Почему происходит ошибка "endAllActiveAnimators on RippleDrawable with handle 0xb400007a89efa920"?
Итак, пишу приложуху, остался главный алгоритм. Он должен выводить на
text view текст по одному слову и использовать простую анимацию
линейного увеличения текста. Для этого в цикле беру из очереди по
одному слову, вставляю в text view, пускаю анимацию и пишу (?)
Thread. sleep()!;
В результате ошибку не выдаёт, но ничего и не работает, лигирование не помогает. На текст вью ничего не отображается. В консоль выводит это:
endAllActiveAnimators on
0xb400007a97c38100 (RippleDrawable) with handle 0xb400007a89efa920
и это:
W/System: A resource failed to call close. W/MIUIScout App:
Enter APP_SCOUT_WARNING State W/MIUIScout App: Event:APP_SCOUT_WARNING
Thread:main backtrace:
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:450)
at java.lang.Thread.sleep(Thread.java:355)
at com.example.speedreader.Stage.countDoun(Stage.java:102)
at com.example.speedreader.Stage.onClick(Stage.java:207)
at android.view.View.performClick(View.java:7753)
at android.view.View.performClickInternal(View.java:7730)
at android.view.View.access$3700(View.java:861)
at android.view.View$PerformClick.run(View.java:29136)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8105)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
I/ple.speedreade:
Thread[6,tid=8133,WaitingInMainSignalCatcherLoop,Thread*=0xb400007a96a40000,peer=0x15280000,"Signal
Catcher"]: reacting to signal 3 I/ple.speedreade:
package com.example.speedreader;
import static java.lang.Thread.sleep;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Stage extends AppCompatActivity implements View.OnClickListener {
@SuppressLint("StaticFieldLeak")
private static ImageButton playStop, back, forward;
private static final String LOG = "MyLog";
private static TextView maniTextView;
private static String[] arrayLine;
private static Queue<String> rowOfWords = new LinkedList<>();
private static String line;
private static boolean play = false;
private static boolean t = true;
private static File file;
static Book book;
private static int numberOfWord;
private static Scanner sc;
static String TAG = "MyLog";
private static Queue<String> rowOfPastWords = new LinkedList<>();
public static boolean backBool = false;
public static boolean forwardBool = false;
private static int coun = 0;
private static boolean flag=true;
private static boolean delay=false;
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
static void closer() {
sc.close();
}
static void preparation() {
Log.d(LOG, "Attempt : preperation");
file = new File(book.getPath());
if (file.exists()) {
String s = file.getAbsolutePath();
try {
sc = new Scanner(s);
} catch (Exception e) {
Log.d(LOG, "Error : preparation");
}
} else{ Log.d(LOG, "Error : preparation(FileNotFound)");}
Log.d(LOG, "Success : preparation");
}
static Queue<String> filling() {
Log.d(LOG, "Attempt : filling");
while (rowOfWords.size() > 1000 && sc.hasNextLine()) {
line = sc.nextLine();
arrayLine = line.split(" ");
for (String a : arrayLine) {
rowOfWords.offer(a);
}
}
Log.d(LOG, "Success : filling");
return rowOfWords;
}
static void showOneWord() throws InterruptedException {
Log.d(LOG, "Attempt : showOneWord");
rowOfPastWords.offer(rowOfWords.peek());
if (rowOfPastWords.size() > numberOfWord) {
rowOfPastWords.poll();
}
maniTextView.setText(rowOfWords.poll());
Thread.sleep(100);
Log.d(LOG, "Succes : showOneWor");
}
private static void countDoun() {
for (int i = 3; i >= 0; i--) {
maniTextView.setText(i+" ");
try {
Thread .sleep(1000);
} catch (InterruptedException e) {
Log.d(LOG, "Error : countDoun");
}
}
}
private static void back() {
Log.d(LOG, "Attempt : back");
if (rowOfWords.size() == 0) return;
try {
countDoun();
for (int i = 0; i < rowOfPastWords.size(); i++) {
maniTextView.setText(rowOfPastWords.poll());
Thread.sleep(100);
}
} catch (InterruptedException e) {
Log.d(LOG, "Error : back");
}
backBool = false;
Log.d(LOG, "Succes : back");
}
private static void forward() {
for (int i = 0; i < numberOfWord; i++) {
rowOfPastWords.offer(rowOfWords.peek());
if (rowOfPastWords.size() > numberOfWord) {
rowOfPastWords.poll();
}
rowOfWords.poll();
}
forwardBool = false;
}
private static void count() {
if (coun % 2 == 0) {
flag = true;
} else {
flag = false;
delay = true;
}
coun++;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
private static void read() {
try {
while (true) {
if (!flag) continue;
if (delay) {
countDoun();
delay = false;
}
if (rowOfWords.size() < 10) filling();
if (rowOfWords.size() == 0) return;
if (backBool) back();
if (forwardBool) forward();
showOneWord();
}
} catch (Exception e) {
Log.d(LOG, "Error : read");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("myLog", "Попытка Stage.onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stage);
playStop = findViewById(R.id.stageIBPlayStop);
playStop.setOnClickListener(this);
back = findViewById(R.id.stageIBBack);
back.setOnClickListener(this);
forward = findViewById(R.id.stageIBForward);
maniTextView = findViewById(R.id.stageTV);
preparation();
read();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.stageIBPlayStop:
count();
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public boolean onCreateOptionsMenu(Menu menu) {
g
etMenuInflater().inflate(R.menu.menu_
st, menu);
return true;
}
@Override
public boolean
onOptionsItemSelected(@NonNull
MenuItem item) {
switch (item.getItemId())
{
case R.id.set:
Intent intent =
new Intent(this, Setting.class);
startActivity(intent);
break;
case R.id.lib:
Intent intent1 =
new Intent(this, Library.class);
startActivity(intent1);
break;
}
return true;
}
static void setBook(Book e) {
book = e;
}
}