Animate rotation of an image in Android

  • I have a gear image which I want to continuously rotate about a fixed point.

  • Earlier I was accomplishing this by including the image in my Android class as an ImageView and applying a RotateAnimation to it.

    @InjectView(R.id.gear00)              ImageView gear00;
    RotateAnimation ra07 = new RotateAnimation(0, 359, 129, 186);
    ra07.setDuration(10000);
    ra07.setRepeatCount(RotateAnimation.INFINITE);
    ra07.setInterpolator(new LinearInterpolator());
    gear00.setAnimation(ra07);
    
  • Basically, I was injecting the ImageView into the class and applying a rotation animation.

    However, I dont have the luxury of using an ImageView anymore. I have to use a Bitmap and rotate it on the canvas.

    How can I go about accomplishing what I was doing earlier in the onDraw() method with a bitmap rotating about a fixed point continiously on the canvas?

    Edit1:

    I tried one of the suggestions mentioned below my code looks a little like the following

    in onCreate():

    Matrix matrix = new Matrix();
    matrix.setRotate(10, 100, 200);
    

    Then in onDraw() (where gear00Scaled is a bitmap to be rotated on the canvas):

    canvas.drawBitmap(gear00Scaled, matrix, new Paint());

    Another method I tried involved saving the canvas, rotating it, then restoring it:

    canvas.save();
    canvas.rotate(10);
    canvas.drawBitmap(gear00Scaled, 100, 200, null);
    canvas.restore();

    Neither seem to be working though!


    In your onCreate() do

    Matrix matrix = new Matrix();
    

    And in onDraw

    float angle = (float) (System.currentTimeMillis() % ROTATE_TIME_MILLIS) 
       / ROTATE_TIME_MILLIS * 360;
    matrix.reset();
    matrix.postTranslate(-source.getWidth() / 2, -source.getHeight() / 2);
    matrix.postRotate(angle);
    matrix.postTranslate(centerX, centerY)
    canvas.drawBitmap(source, matrix, null);
    invalidate(); // Cause a re-draw
    

    ROTATE_TIME_MILLIS is the full circle time, eg 2000 is 2 seconds.


    Make an XML class (suppose: rotate.xml) and place it in res/anim folder and then write the following code in it:

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"
        android:toDegrees="360" />
    

    Then in your java class, do the following in OnCreate :

    final Animation a = AnimationUtils.loadAnimation(CustomActivity.this,
                    R.anim.rotate);
            a.setDuration(3000);
            gear00.startAnimation(a);
    

    OR

    To do it using bitmap, I hope the following sequence of code helps you:

    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, config);
    Canvas canvas = new Canvas(targetBitmap);
    Matrix matrix = new Matrix();
    matrix.setRotate(mRotation,source.getWidth()/2,source.getHeight()/2);
    canvas.drawBitmap(source, matrix, new Paint());
    

    If you check the following method from:

    ~frameworksbasegraphicsjavaandroidgraphicsBitmap.java

    public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height,
            Matrix m, boolean filter)
    

    this would explain what it does with rotation and translate.


    I want to rotate custom image as progress dialog in my application.You can use below code to rotate image,

        RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , 
        Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
        anim.setInterpolator(new LinearInterpolator());
        anim.setRepeatCount(Animation.INFINITE);
        anim.setDuration(1000);
        imageView.setAnimation(anim);
        imageView.startAnimation(anim);
    

    If u find your solution from above code than mark this answer as accepted and also vote up.

    链接地址: http://www.djcxy.com/p/63788.html

    上一篇: JavaScript中的图形可视化库

    下一篇: 在Android中动画旋转图像