O que está errado? "Only the original thread that created a view hierarchy can touch its views"

Eu estou acompanhando a aula, e como sempre (aposto que já aconteceu isso com vocês, quando eram iniciantes :smile:), então eu fiz tudo certinho, mas quando executo, da uma exception, dizendo que
“Only the original thread that created a view hierarchy can touch its views.”. Mas eu fiz exatamente como o cara, e crasha quando termina a animação, e vai para o “some”. O crash é bem na linha dentro do run. Vejam:

package com.example.alfndega;

import androidx.annotation.ContentView;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;

import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;

import android.widget.ImageView;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

ImageView seta;
TextView texto;
Animation aparece, some;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    aparece = new AlphaAnimation(0,1);
    some = new AlphaAnimation(1,0);
    some.setDuration(1000);
    aparece.setDuration(500);

    seta = findViewById(R.id.imgSeta);
    seta.setVisibility(View.INVISIBLE);
    texto = findViewById(R.id.lblTexto);

    aparece.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            seta.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            seta.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
    some.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            seta.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            seta.setVisibility(View.INVISIBLE);
            texto.setText("Toque na tela para continuar...");
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

    texto.setText("Toque na tela para continuar...");

}

public void tocouNaTela(View v) {
    if(Math.random()>0.5){
        seta.setScaleX(-1f);
        texto.setText("Siga para a direita");
    }else{
        seta.setScaleX(1f);
        texto.setText("Siga para a esquerda");
    }

    seta.startAnimation(aparece);

    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            seta.startAnimation(some);
        }
    },2000);
}

}

01-10 20:15:20.581 3960-3960/? D/dalvikvm: Late-enabling CheckJNI 01-10 20:15:20.641 3960-3966/? D/dalvikvm: Debugger has detached; object registry had 1 entries 01-10 20:15:21.321 3960-3960/? D/OpenGLRenderer: Enabling debug mode 0 01-10 20:15:24.611 3960-3982/com.example.alfndega W/dalvikvm: threadid=11: thread exiting with uncaught exception (group=0x41e51ba8) 01-10 20:15:24.621 3960-3982/com.example.alfndega E/AndroidRuntime: FATAL EXCEPTION: Timer-0 Process: com.example.alfndega, PID: 3960 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6177) at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:865) at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320) at android.view.View.invalidate(View.java:10940) at android.view.View.startAnimation(View.java:16814) at com.example.alfndega.MainActivity$3.run(MainActivity.java:92) at java.util.Timer$TimerImpl.run(Timer.java:284) 01-10 20:17:07.471 3960-3982/com.example.alfndega I/Process: Sending signal. PID: 3960 SIG: 9