【问题标题】:Create, Rotate and TranslateAnimation in android在 android 中创建、旋转和翻译动画
【发布时间】:2014-01-08 09:02:47
【问题描述】:

我正在尝试创建一个 android 应用程序,当我触摸屏幕上的任何位置时,它会执行以下操作:

  1. 一个新的 ImageView 必须出现在屏幕的中心(至少对于这个例子,我们可以说图像视图中的图片是一个箭头);
  2. 有箭头指向我触摸屏幕的方向。
  3. 箭头必须从屏幕中心平移(使用动画)到屏幕被触摸的位置。

由于我是 Android 的新手,所以我不知道最好的方法是什么,所以我想出了以下不工作的解决方案:

happyrelativelayout.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() ==MotionEvent.ACTION_DOWN){
                ImageView arrow = new ImageView(ctx);
                arrow.setImageResource(R.drawable.arrow);
                arrow.setX(centerx);
                arrow.setY(centery);
                float angle = -(float) Math.toDegrees(Math.atan2(centerx - event.getX(), centery - event.getY()));
                arrow.setRotation(angle);
                happyrelativelayout.addView(arrow);
                arrowanimation = new TranslateAnimation(0, event.getX() - centerx, 0, event.getY() - centery);
                arrowanimation.setFillAfter(true);
                arrowanimation.setDuration(1000);
                arrow.startanimation(arrowanimation);
            }
       }
}

有了这个解决方案,除了动画之外,一切似乎都按原样进行。 即使箭头移动到触摸点,也没有动画,箭头只是从中心向触摸点闪烁。我错过了什么重要的东西?

【问题讨论】:

    标签: android rotation ontouchlistener translate-animation


    【解决方案1】:

    代码看起来不错,但我从未使用过TranslateAnimation()

    我个人使用 ObjectAnimator 类,这通常是因为我想使用 NineOldAndroids 来支持旧版本。

    这是使用 ObjectAnimator 时的样子。

    final ObjectAnimator translateX = ObjectAnimator.ofFloat(arrow, "translationX", centerX, event.getX());
    translateX.setDuration(1000);
    
    final ObjectAnimator translateY = ObjectAnimator.ofFloat(arrow, "translationY", centerY, event.getY());
    translateY.setDuration(1000);
    
    final AnimatorSet moveAnimation = new AnimatorSet();
    moveAnimation.playTogether(translateX, translateY);
    moveAnimation.start();
    

    【讨论】:

    • 没问题,很高兴为您提供帮助。
    最近更新 更多