动画秒针

时间:2014-11-14 17:10:25

标签: android animation

如何使用枢轴作为图像底部中心(下面给出的图像链接)为模拟时钟的秒针设置动画。

  1. 目前图像以中心为枢轴旋转,但我需要枢轴为图像中红点所示的底部中心。我尝试设置0.5,1.0和1.0,0.5,但图像移动到不同的区域,并且没有在正确的位置旋转。
  2. 使用当前动画,秒针平滑扫描,如何实现与传统模拟时钟类似的停止和动画,停止和动画循环。
  3. image

    我正在使用的代码如下所示

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        final Handler handler = new Handler();
        calendar = Calendar.getInstance();
        seconds = calendar.get(Calendar.SECOND);
        seconds++;
        handler.postDelayed(new Runnable() {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                Log.i("Canvas", "second is " + seconds);
                // imageView.animate()
                // .setDuration(1000)
                // .rotation(6f * seconds);
                RotateAnimation rotateAnimation = new RotateAnimation(
                        (seconds - 1) * 6, seconds * 6,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);
    
                rotateAnimation.setInterpolator(new LinearInterpolator());
                rotateAnimation.setDuration(1000);
                rotateAnimation.setFillAfter(true);
                imageView.startAnimation(rotateAnimation);
                handler.postDelayed(this, 1000);
                seconds++;
            }
        }, 1000);
    }
    

2 个答案:

答案 0 :(得分:0)

秒针的长度约等于圆的半径或圆的直径的一半。您的第二只手的旋转原点需要成为该圆的中心。将圆的中心放在零x y原点。将秒针的底部放在零原点上。旋转相对于圆的中心。

答案 1 :(得分:0)

当我使用0.5f和1.0f作为旋转轴时,它起作用了。所需的更改是ImageView的高度和宽度应该是固定的。之前它被设置为WRAP_CONTENT。这导致图像在旋转前移动。

RotateAnimation rotateAnimation = new RotateAnimation(
                (seconds - 1) * 6, seconds * 6,
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 1f);