在Android中动画旋转图像

  • 我有一个齿轮图像,我想连续旋转一个固定点。

  • 之前我通过在Android类中包含图像作为ImageView并将RotateAnimation应用于它来完成此任务。

    @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);
    
  • 基本上,我是将ImageView注入类并应用旋转动画。

    但是,我没有奢侈的使用ImageView了。 我必须使用位图并在画布上旋转它。

    我怎样才能在onDraw()方法中完成我之前做的工作,并在画布上连续旋转一个固定点的位图?

    EDIT1:

    我尝试了下面提到的其中一个建议,我的代码看起来有点像以下内容

    在onCreate()中:

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

    然后在onDraw()(其中gear00Scaled是一个位图在画布上旋转):

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

    我尝试过的另一种方法是保存画布,旋转它然后恢复它:

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

    虽然似乎没有工作!


    在你的onCreate()做

    Matrix matrix = new Matrix();
    

    并在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是整圈时间,例如2000是2秒。


    制作一个XML类(假设:rotate.xml)并将其放置在res / anim文件夹中,然后在其中写入以下代码:

    <?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" />
    

    然后在你的java类中,在OnCreate执行以下操作:

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

    要么

    要使用位图来完成它,我希望以下代码序列可以帮助您:

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

    如果您从以下方面检查以下方法:

    〜框架基图形 java中机器人图形 Bitmap.java

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

    这将解释它对旋转和翻译的作用。


    我想在应用程序中将自定义图像作为进度对话框旋转。您可以使用下面的代码来旋转图像,

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

    如果你从上面的代码找到你的解决方案,而不是将这个答案标记为已接受,并且还投票。

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

    上一篇: Animate rotation of an image in Android

    下一篇: Android map v2 zoom to show all the markers