微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Android进行交互式动画(翻译)

我在Android中有一些png序列,我需要从屏幕的顶部到底部动画他们的x和y位置转换.在动画发生时,我需要对象来接收点击事件.

我知道这在3.0之前的Android版本中效果不好,因为对象的显示位于与实际对象不同的位置,因此您不会在动画中期获得点击事件(这是我需要的)您不是仅在显示屏上单击该对象.

我正在做这样的事情,动画看起来很好,但我从来没有进入点击处理程序:

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();
    }
});

解决方法:

你是对的,问题在于蜂窝前,只有动画视图的视觉方面正在发生.

这意味着除了执行“可视”动画之外,还必须设置动画视图的框架/ LayoutParams动画/动画.

对于pre-Honeycomb设备,我发现http://nineoldandroids.com/非常适用于收听动画,你可以使用它来适当地设置视图的LayoutParams,但也有其他例子,例如SO:https://stackoverflow.com/a/3952933/429047

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐