1

画像をある程度回転させ、背景を赤色で塗りつぶそうとしています。たとえば、私は画像を持っていて、15 分 (45 度) に分の niddle を回転させ、その 4 分の 1 円を赤色で表示したいと考えています。

次のコードを使用して、回転をある角度に回転させましたが、背景色を塗りつぶすことができません。助けてください。

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 に答える