我有一些在Android中的png序列,我需要使它们在屏幕从上到下平移x和y位置。在动画发生时,我需要这些对象接收点击事件。
我知道在Android 3.0之前的版本中,这并不是很好使,因为对象的“显示”与实际对象所在的位置不同,所以你无法在动画进行时获得点击事件(这正是我需要的),因为你只是在点击显示而不是对象本身。
我正在做类似于这样的事情,动画看起来很好,但我从未进入过点击处理程序:
有什么方法可以支持3.0之前的设备进行交互式动画?是否有一种自定义的动画类,可以使用后台线程来动画化对象的x和y位置?
--更新--- 我尝试使用NineOldAndroid的解决方案,动画看起来很好,但是在动画期间我没有得到onclick事件。这是我的更新代码。所以这在ICS上运行良好,但在2.3上不行。我做错了什么吗?还是NineOldWorld的解决方案实际上并没有在幕后更改布局边距?
--更新 #2-- 我也尝试了路径动画,但在动画期间和之后,我没有得到按钮点击事件。有人知道我做错了什么吗?
我知道在Android 3.0之前的版本中,这并不是很好使,因为对象的“显示”与实际对象所在的位置不同,所以你无法在动画进行时获得点击事件(这正是我需要的),因为你只是在点击显示而不是对象本身。
我正在做类似于这样的事情,动画看起来很好,但我从未进入过点击处理程序:
Animation animation = new TranslateAnimation(0, 20,0, 300);
animation.setDuration(1000);
ticket.startAnimation(animation);
ticket.startAnimation(animation);
ticket.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
//I don't get into this click event during animation
view.setVisibility(View.GONE);
}
});
有什么方法可以支持3.0之前的设备进行交互式动画?是否有一种自定义的动画类,可以使用后台线程来动画化对象的x和y位置?
--更新--- 我尝试使用NineOldAndroid的解决方案,动画看起来很好,但是在动画期间我没有得到onclick事件。这是我的更新代码。所以这在ICS上运行良好,但在2.3上不行。我做错了什么吗?还是NineOldWorld的解决方案实际上并没有在幕后更改布局边距?
ImageView ticket = new ImageView(myActivity);
ticket.setImageResource(R.drawable.ticket);
ticket.setVisibility(View.INVISIBLE);
ticketHolder.addView(ticket);
ValueAnimator animation = ObjectAnimator.ofFloat(ticket, "y",
-200f, ticketHolder.getHeight());
animation.setDuration(3000);
animation.start();
animation.setStartDelay(i*1000);
animationsMap.put(animation, ticket);
ticket.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
view.setVisibility(View.GONE);
}
});
animation.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
// tickets.remove(((ObjectAnimator)animation).getTarget());
ImageView t = (ImageView) ((ObjectAnimator) animation).getTarget();
t.setVisibility(View.GONE);
animationsMap.remove(animation);
if(animationsMap.size() == 0){
ticketsAnimating = false;
scrim.setVisibility(View.VISIBLE);
}
}
@Override
public void onAnimationStart(Animator animation){
ImageView t = (ImageView) ((ObjectAnimator) animation).getTarget();
t.setVisibility(View.VISIBLE);
}
});
--更新 #2-- 我也尝试了路径动画,但在动画期间和之后,我没有得到按钮点击事件。有人知道我做错了什么吗?
mButton = (Button) findViewById(R.id.delete_me);
mButtonProxy = AnimatorProxy.wrap(mButton);
// Set up the path we're animating along
AnimatorPath path = new AnimatorPath();
path.moveTo(0, 0);
path.lineTo(0, 300);
path.curveTo(100, 0, 300, 900, 400, 500);
// Set up the animation
final ObjectAnimator anim = ObjectAnimator.ofObject(this, "buttonLoc",
new PathEvaluator(), path.getPoints().toArray());
anim.setDuration(10000);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("united", "button clicked");
anim.start();
}
});