当前位置: 首页 > 知识库问答 >
问题:

在Android中设置图像旋转动画

赵华彩
2023-03-14

>

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

    早些时候,我通过将图像作为ImageView包含在Android类中并对其应用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()方法中所做的工作?

    编辑1:

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

    在onCreate()中:

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

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

    帆布drawBitmap(Gear00缩放、矩阵、新绘制());

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

    帆布save()<画布。旋转(10)<画布。drawBitmap(gear00Scaled,100200,空)<画布。恢复();

    不过,两者似乎都不起作用!

  • 共有3个答案

    卫俊誉
    2023-03-14

    在onCreate()中,执行以下操作

    Matrix matrix = new Matrix();
    

    在昂德劳

    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秒。

    顾斌
    2023-03-14

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

    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);
    
    刘永望
    2023-03-14

    创建一个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());
    

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

    ~frameworks\base\graphics\java\android\graphics\Bitmap。JAVA

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

    这将解释它对旋转和平移的作用。

     类似资料:
    • 有没有人知道如何正确旋转NV21图像字节[]保留其颜色信息正确。

    • 问题内容: 我有一个齿轮图像,我想绕固定点连续旋转。 之前,我是通过将图像作为ImageView包含在我的Android类中并对其应用RotateAnimation来实现的。 RotateAnimation ra07 = new RotateAnimation(0, 359, 129, 186); ra07.setDuration(10000); ra07.setRepeatCount(Rotat

    • 在我的应用程序中,图像是从相机捕获的,然后显示在 我已经成功地完成了此方法,但是当我的图像显示在中时,图像显示在旋转后 我想旋转图像,然后在中显示 当我单击前摄像头上的图像时,在下面代码的帮助下,图像显示正确 但当我从后摄像头点击时,图像将显示在前摄像头的对面。还有一件事,当我从不同角度单击“来自摄影机的图像”时,图像将以不同角度显示在中。

    • 我正在捕获图像并设置为图像视图。对我来说很管用。但问题是,当我将图像设置为ImageView时,它会被旋转。感谢任何帮助。

    • 我是android编程的新手。我想在显示时在一个xml中动态设置图像。具体来说,我将项目相关的图像存储在drawable文件夹中。此外,我将图像名称存储在字符串变量中,并尝试动态地将这些图像设置为imageview。但图像没有显示。 我的代码:

    • OpenGL总是围绕(0,0,0)旋转。但是我需要绕着相机旋转。我知道在GL中,没有相机,但是如果我翻译回(0,0,-6.0),它会绕着(0,0,0)旋转,而不是绕着(0,0,-6.0)旋转 所以我的问题是:如何在opengl和c中设置旋转中心 我已经找到了这篇文章:OpenGL围绕一个点旋转相机 显示此解决方案的地方: 旋转函数通常围绕原点旋转。要围绕另一个点P旋转,必须:平移(-P)旋转平移(