将imageview旋转到不在中间的位置

时间:2015-02-14 04:41:57

标签: android rotation

我尝试将imageView旋转到位,而不是在中间。我使用的是RotateAnimation,这是我的代码:

int x = imageView.getLeft();
int y = imageView.getTop();
Animation rotate = new RotateAnimation((float) 0, (float) 359, (float) x, (float) y);
imageView.setAnimation(rotate);

当我这样做时,imageView不会旋转到位,而是围绕屏幕上的枢轴点旋转。但是,当我在调试模式下运行它时,x和y等于300和352,这似乎是正确的。有人可以解释为什么imageView围绕其他枢轴点旋转而不是我为它设置的那个吗?

2 个答案:

答案 0 :(得分:2)

在anim文件夹中创建rotate.xml文件并使用以下代码

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

和活动

myImage.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,
                R.anim.rotate));

答案 1 :(得分:0)

试试这个

public static android.graphics.BitmapFactory.Options getSize(Context c, int resId){
        android.graphics.BitmapFactory.Options o = new android.graphics.BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(c.getResources(), resId, o);
        return o;
    }

这将返回一个包含实际宽度和高度的Options对象。从活动中你可以像这样使用它:

ImageView img = (ImageView)findViewById(R.id.yourImageViewId);
Options o = getSize(this, R.drawable.yourImage);
Matrix m = new Matrix();
m.postRotate(angle, o.outWidth/2, o.outHeight/2);
img.setScaleType(ScaleType.MATRIX);
img.setImageMatrix(m);