1

我正在尝试将图像旋转到某种程度并将背景填充为红色。例如,我有一个图像,想要将分钟旋转到 15 分钟(45 度)并用红色显示那个四分之一圆。

我使用以下代码将我的旋转旋转到某个角度,但我无法填充背景颜色。请帮忙。

RotateAnimation rotateAnimation = new RotateAnimation(
                (1 - 1) * 6, 10 * 6,
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 0.5f);

        rotateAnimation.setInterpolator(new LinearInterpolator());
        rotateAnimation.setDuration(5000);
        rotateAnimation.setFillEnabled(true);
        rotateAnimation.setFillBefore(true);
        rotateAnimation.setBackgroundColor(Color.RED);
        orgClockImage.startAnimation(rotateAnimation);

谢谢

4

1 回答 1

0

您也可以使用矩阵旋转位图。

public class RotateBitmap {

public static final String  TAG = "RotateBitmap";
private Bitmap                  mBitmap;
private int                     mRotation;
private int                     mWidth;
private int                     mHeight;
private int                     mBitmapWidth;
private int                     mBitmapHeight;

public RotateBitmap( Bitmap bitmap, int rotation )
{
    mRotation = rotation % 360;
    setBitmap( bitmap );
}

public void setRotation( int rotation )
{
    mRotation = rotation;
    invalidate();
}

public int getRotation()
{
    return mRotation % 360;
}

public Bitmap getBitmap()
{
    return mBitmap;
}

public void setBitmap( Bitmap bitmap )
{
    mBitmap = bitmap;

    if ( mBitmap != null ) {
        mBitmapWidth = bitmap.getWidth();
        mBitmapHeight = bitmap.getHeight();
        invalidate();
    }
}

private void invalidate()
{
    Matrix matrix = new Matrix();
    int cx = mBitmapWidth / 2;
    int cy = mBitmapHeight / 2;
    matrix.preTranslate( -cx, -cy );
    matrix.postRotate( mRotation );
    matrix.postTranslate( cx, cx );

    RectF rect = new RectF( 0, 0, mBitmapWidth, mBitmapHeight );
    matrix.mapRect( rect );
    mWidth = (int)rect.width();
    mHeight = (int)rect.height();
}

public Matrix getRotateMatrix()
{
    Matrix matrix = new Matrix();
    if ( mRotation != 0 ) {
        int cx = mBitmapWidth / 2;
        int cy = mBitmapHeight / 2;
        matrix.preTranslate( -cx, -cy );
        matrix.postRotate( mRotation );
        matrix.postTranslate( mWidth / 2, mHeight / 2 );
    }

    return matrix;
}

public int getHeight()
{
    return mHeight;
}

public int getWidth()
{
    return mWidth;
}

public void recycle()
{
    if ( mBitmap != null ) {
        mBitmap.recycle();
        mBitmap = null;
    }
 }
}
于 2013-05-27T13:14:28.700 回答