Почему view.startAnimation (анимация) не работает при вызове из события?

Я создал настраиваемое представление, которое использует манекен TranslateAnimation для настройки некоторых свойств макета. Я использую Interpolator для вычисления высоты и применяю его к представлению внутри метода applyTransformation () для TranslateAnimation.

Это работает очень хорошо, если я запускаю анимацию из своей Activity.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i("test", "onCreate()"); view.expand(); // This method starts the animation } 

Когда я пытаюсь сделать то же самое с помощью события касания, ничего не происходит.

 @Override // This method is touch handler of the View itself public boolean onTouch(View v, MotionEvent event) { Log.i("test", "onTouch()"); this.expand(); // onTouch is part of the view itself and calls expand() directly return true; } 

Мой метод расширения выглядит следующим образом:

 public void expand() { Log.i("test", "Expand!"); TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 0) { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { Log.i("test", "applyTransformation()"); super.applyTransformation(interpolatedTime, t); // do something } }; anim.setDuration(500); anim.setInterpolator(new AccelerateDecelerateInterpolator()); this.someInternalView.startAnimation(anim); } 

Когда моя деятельность создана, Logcat показывает «onCreate ()» Внутри моего события касания Logcat показывает «onTouch ()» Внутри метода expand () Logcat показывает «Expand!». – либо вызывается из действия, либо из события.

Внутри метода applyTransformation () Logcat показывает «applyTransformation ()» – НО! Только если функция expand () вызывается из onCreate (). Любая попытка попытаться запустить анимацию из события не удалась.

Мне кажется, что это какая-то проблема с потоками. Может ли это быть? Есть ли что-то, чего я не вижу? Насколько я вижу из других сообщений, запуск анимаций из событий должен работать без проблем …

Заранее спасибо!

попробуй это:

 public void expand() { Log.i("test", "Expand!"); runOnUiThread(new Runnable() { @Override public void run() { TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 0) { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { Log.i("test", "applyTransformation()"); super.applyTransformation(interpolatedTime, t); // do something } }; anim.setDuration(500); anim.setInterpolator(new AccelerateDecelerateInterpolator()); this.someInternalView.startAnimation(anim); } }); } 
Intereting Posts
RecyclerView Adapter дает ошибку «Иерархия типа RecycleAdapter несовместима» Кордова: Как установить разные имена пакетов на платформу с помощью cordova-cli? Как создать папку программно на Android 1.x до 4.x Карты Android v2 становятся низкими, когда область карты автоматически перемещается Возможно ли внедрить глубокие ссылки с веб-сайта на родное приложение? (Android) Proguard не может найти динамически ссылочный класс javax.swing. * Android – Как изменить цвет ScrollView / ListView Overscroll? (См., Например, пример) Как реализовать функции чата в приложении Android? JQuery Мобильные иконки белые, а не черные на Android Android HttpClient – имя хоста в сертификате не соответствует <example.com>! = <*. Example.com> Объединение таблиц в SQLite.Net с LINQ на xamarin.android не поддерживается Android добавляет пользовательское правило lint к проекту (git) Лучшая практика для хранения частных ключей API в Android Белый цвет переднего плана TabWidget? Как объединить аудиофайл с изображением или видеофайлом в Android?