Dinesh
Dinesh

Reputation: 6532

How to Rotate circle animation in Canvas

I want to rotate circle continuously in canvas on android. i am drawing circle using canvas and i am rotate circle continuously.it is possible,if possible how do it with code or example can help me with greatly appreciated!

Here's my code for draw circle on canvas:

    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.view.View;

    public class AnimationActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(new SampleView(this));
        }


    public class SampleView extends View
    {
        public SampleView(Context context)
        {
            super(context);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected void onDraw(Canvas canvas)
        {
             Paint mPaint = new Paint();
             mPaint.setStyle(Paint.Style.STROKE);
             mPaint.setStrokeWidth(10);
             mPaint.setColor(Color.RED);
             canvas.drawCircle(75, 75, 75, mPaint);
        }
    }
  }

Thanks in Advance!

Upvotes: 5

Views: 9528

Answers (2)

Ibungo
Ibungo

Reputation: 1137

You can use Animation to rotate the circle you've drawn (using Canvas). The code below works. I've modified your code and added necessary changes.

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class AnimationActivity extends Activity {

    public class SampleView extends View {

        Paint mPaint = new Paint();
        private Animation anim;

        public SampleView(Context context) {
            super(context);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(10);
            mPaint.setColor(Color.RED);
        }

        private void createAnimation(Canvas canvas) {
            anim = new RotateAnimation(0, 360, getWidth()/2, getHeight()/2);
            anim.setRepeatMode(Animation.RESTART);
            anim.setRepeatCount(Animation.INFINITE);
            anim.setDuration(10000L);
            startAnimation(anim);
       }

        protected void onDraw(Canvas canvas) {

             int cx = getWidth()/2; // x-coordinate of center of the screen
             int cy = getHeight()/2; // y-coordinate of the center of the screen

             // Starts the animation to rotate the circle.
             if (anim == null) 
               createAnimation(canvas)

             canvas.drawCircle(cx, cy, 150, mPaint); // drawing the circle.
        }        
    }

    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
    }
}

Enjoy!

Upvotes: 3

Mahesh
Mahesh

Reputation: 3997

canvas.rotate(-rotate_angle, rotate_center_x, rotate_center_y);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
RectF oval3 = new RectF(rotate_center_x-150, rotate_center_y-50, rotate_center_x+150, rotate_center_y+50);
canvas.drawOval(oval3, paint);
//resume original angle
canvas.rotate(rotate_angle, rotate_center_x, rotate_center_y);

For More Information, click here.. :)

Upvotes: 0

Related Questions