我创建了一个自定义视图,它使用虚拟TranslateAnimation来设置一些布局属性。我使用Interpolator计算高度,并将其应用于TranslateAnimation的applyTransformation()方法内的视图。
如果我从我的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()” - 但是!仅当从onCreate()调用expand()时。尝试从事件启动动画的任何尝试都失败了。
这看起来像某种线程问题。这可能吗?有什么我想念的吗?据我在其他帖子中看到,从事件开始动画应该没有任何问题......
提前致谢!
答案 0 :(得分:1)
试试这个:
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);
}
});
}