Я создал настраиваемое представление, которое использует фиктивный TranslateAnimation для настройки некоторых свойств макета. Я использую Интерполятор для вычисления высоты и применяю его к представлению внутри метода 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 ()" Внутри раскрывающегося ( ) метод Logcat показывает "Развернуть!" - либо вызывается из мероприятия, либо из события.
Внутри метода applyTransformation () Logcat показывает «applyTransformation ()» - НО! только если expand () вызывается из onCreate (). Любая попытка запустить анимацию из события не удалась.
Мне кажется, что это какая-то проблема с потоками. Могло ли это быть? Что мне не хватает? Насколько я понимаю из других сообщений, запуск анимации из событий должен работать без проблем ...
Заранее спасибо!