Android APIs
public class

Matrix

extends Object
java.lang.Object
   ↳ android.graphics.Matrix

Class Overview

The Matrix class holds a 3x3 matrix for transforming coordinates.

Summary

Nested Classes
enum Matrix.ScaleToFit Controlls how the src rect should align into the dst rect for setRectToRect(). 
Constants
int MPERSP_0
int MPERSP_1
int MPERSP_2
int MSCALE_X
int MSCALE_Y
int MSKEW_X
int MSKEW_Y
int MTRANS_X
int MTRANS_Y
Public Constructors
Matrix()
Create an identity matrix
Matrix(Matrix src)
Create a matrix that is a (deep) copy of src
Public Methods
boolean equals(Object obj)
Returns true iff obj is a Matrix and its values equal our values.
void getValues(float[] values)
Copy 9 values from the matrix into the array.
int hashCode()
Returns an integer hash code for this object.
boolean invert(Matrix inverse)
If this matrix can be inverted, return true and if inverse is not null, set inverse to be the inverse of this matrix.
boolean isAffine()
Gets whether this matrix is affine.
boolean isIdentity()
Returns true if the matrix is identity.
void mapPoints(float[] pts)
Apply this matrix to the array of 2D points, and write the transformed points back into the array
void mapPoints(float[] dst, int dstIndex, float[] src, int srcIndex, int pointCount)
Apply this matrix to the array of 2D points specified by src, and write the transformed points into the array of points specified by dst.
void mapPoints(float[] dst, float[] src)
Apply this matrix to the array of 2D points specified by src, and write the transformed points into the array of points specified by dst.
float mapRadius(float radius)
Return the mean radius of a circle after it has been mapped by this matrix.
boolean mapRect(RectF dst, RectF src)
Apply this matrix to the src rectangle, and write the transformed rectangle into dst.
boolean mapRect(RectF rect)
Apply this matrix to the rectangle, and write the transformed rectangle back into it.
void mapVectors(float[] dst, float[] src)
Apply this matrix to the array of 2D vectors specified by src, and write the transformed vectors into the array of vectors specified by dst.
void mapVectors(float[] vecs)
Apply this matrix to the array of 2D vectors, and write the transformed vectors back into the array.
void mapVectors(float[] dst, int dstIndex, float[] src, int srcIndex, int vectorCount)
Apply this matrix to the array of 2D vectors specified by src, and write the transformed vectors into the array of vectors specified by dst.
boolean postConcat(Matrix other)
Postconcats the matrix with the specified matrix.
boolean postRotate(float degrees)
Postconcats the matrix with the specified rotation.
boolean postRotate(float degrees, float px, float py)
Postconcats the matrix with the specified rotation.
boolean postScale(float sx, float sy)
Postconcats the matrix with the specified scale.
boolean postScale(float sx, float sy, float px, float py)
Postconcats the matrix with the specified scale.
boolean postSkew(float kx, float ky, float px, float py)
Postconcats the matrix with the specified skew.
boolean postSkew(float kx, float ky)
Postconcats the matrix with the specified skew.
boolean postTranslate(float dx, float dy)
Postconcats the matrix with the specified translation.
boolean preConcat(Matrix other)
Preconcats the matrix with the specified matrix.
boolean preRotate(float degrees)
Preconcats the matrix with the specified rotation.
boolean preRotate(float degrees, float px, float py)
Preconcats the matrix with the specified rotation.
boolean preScale(float sx, float sy)
Preconcats the matrix with the specified scale.
boolean preScale(float sx, float sy, float px, float py)
Preconcats the matrix with the specified scale.
boolean preSkew(float kx, float ky, float px, float py)
Preconcats the matrix with the specified skew.
boolean preSkew(float kx, float ky)
Preconcats the matrix with the specified skew.
boolean preTranslate(float dx, float dy)
Preconcats the matrix with the specified translation.
boolean rectStaysRect()
Returns true if will map a rectangle to another rectangle.
void reset()
Set the matrix to identity
void set(Matrix src)
(deep) copy the src matrix into this matrix.
boolean setConcat(Matrix a, Matrix b)
Set the matrix to the concatenation of the two specified matrices and return true.
boolean setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount)
Set the matrix such that the specified src points would map to the specified dst points.
boolean setRectToRect(RectF src, RectF dst, Matrix.ScaleToFit stf)
Set the matrix to the scale and translate values that map the source rectangle to the destination rectangle, returning true if the the result can be represented.
void setRotate(float degrees)
Set the matrix to rotate about (0,0) by the specified number of degrees.
void setRotate(float degrees, float px, float py)
Set the matrix to rotate by the specified number of degrees, with a pivot point at (px, py).
void setScale(float sx, float sy, float px, float py)
Set the matrix to scale by sx and sy, with a pivot point at (px, py).
void setScale(float sx, float sy)
Set the matrix to scale by sx and sy.
void setSinCos(float sinValue, float cosValue)
Set the matrix to rotate by the specified sine and cosine values.
void setSinCos(float sinValue, float cosValue, float px, float py)
Set the matrix to rotate by the specified sine and cosine values, with a pivot point at (px, py).
void setSkew(float kx, float ky, float px, float py)
Set the matrix to skew by sx and sy, with a pivot point at (px, py).
void setSkew(float kx, float ky)
Set the matrix to skew by sx and sy.
void setTranslate(float dx, float dy)
Set the matrix to translate by (dx, dy).
void setValues(float[] values)
Copy 9 values from the array into the matrix.
String toShortString()
String toString()
Returns a string containing a concise, human-readable description of this object.
Protected Methods
void finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final int MPERSP_0

Added in API level 1

Constant Value: 6 (0x00000006)

public static final int MPERSP_1

Added in API level 1

Constant Value: 7 (0x00000007)

public static final int MPERSP_2

Added in API level 1

Constant Value: 8 (0x00000008)

public static final int MSCALE_X

Added in API level 1

Constant Value: 0 (0x00000000)

public static final int MSCALE_Y

Added in API level 1

Constant Value: 4 (0x00000004)

public static final int MSKEW_X

Added in API level 1

Constant Value: 1 (0x00000001)

public static final int MSKEW_Y

Added in API level 1

Constant Value: 3 (0x00000003)

public static final int MTRANS_X

Added in API level 1

Constant Value: 2 (0x00000002)

public static final int MTRANS_Y

Added in API level 1

Constant Value: 5 (0x00000005)

Public Constructors

public Matrix ()

Added in API level 1

Create an identity matrix

public Matrix (Matrix src)

Added in API level 1

Create a matrix that is a (deep) copy of src

Parameters
src Matrix: The matrix to copy into this matrix

Public Methods

public boolean equals (Object obj)

Added in API level 1

Returns true iff obj is a Matrix and its values equal our values.

Parameters
obj Object: the object to compare this instance with.
Returns
boolean true if the specified object is equal to this Object; false otherwise.

public void getValues (float[] values)

Added in API level 1

Copy 9 values from the matrix into the array.

Parameters
values float

public int hashCode ()

Added in API level 1

Returns an integer hash code for this object. By contract, any two objects for which equals(Object) returns true must return the same hash code value. This means that subclasses of Object usually override both methods or neither method.

Note that hash values must not change over time unless information used in equals comparisons also changes.

See Writing a correct hashCode method if you intend implementing your own hashCode method.

Returns
int this object's hash code.

public boolean invert (Matrix inverse)

Added in API level 1

If this matrix can be inverted, return true and if inverse is not null, set inverse to be the inverse of this matrix. If this matrix cannot be inverted, ignore inverse and return false.

Parameters
inverse Matrix
Returns
boolean

public boolean isAffine ()

Added in API level 21

Gets whether this matrix is affine. An affine matrix preserves straight lines and has no perspective.

Returns
boolean Whether the matrix is affine.

public boolean isIdentity ()

Added in API level 1

Returns true if the matrix is identity. This maybe faster than testing if (getType() == 0)

Returns
boolean

public void mapPoints (float[] pts)

Added in API level 1

Apply this matrix to the array of 2D points, and write the transformed points back into the array

Parameters
pts float: The array [x0, y0, x1, y1, ...] of points to transform.

public void mapPoints (float[] dst, int dstIndex, float[] src, int srcIndex, int pointCount)

Added in API level 1

Apply this matrix to the array of 2D points specified by src, and write the transformed points into the array of points specified by dst. The two arrays represent their "points" as pairs of floats [x, y].

Parameters
dst float: The array of dst points (x,y pairs)
dstIndex int: The index of the first [x,y] pair of dst floats
src float: The array of src points (x,y pairs)
srcIndex int: The index of the first [x,y] pair of src floats
pointCount int: The number of points (x,y pairs) to transform

public void mapPoints (float[] dst, float[] src)

Added in API level 1

Apply this matrix to the array of 2D points specified by src, and write the transformed points into the array of points specified by dst. The two arrays represent their "points" as pairs of floats [x, y].

Parameters
dst float: The array of dst points (x,y pairs)
src float: The array of src points (x,y pairs)

public float mapRadius (float radius)

Added in API level 1

Return the mean radius of a circle after it has been mapped by this matrix. NOTE: in perspective this value assumes the circle has its center at the origin.

Parameters
radius float
Returns
float

public boolean mapRect (RectF dst, RectF src)

Added in API level 1

Apply this matrix to the src rectangle, and write the transformed rectangle into dst. This is accomplished by transforming the 4 corners of src, and then setting dst to the bounds of those points.

Parameters
dst RectF: Where the transformed rectangle is written.
src RectF: The original rectangle to be transformed.
Returns
boolean the result of calling rectStaysRect()

public boolean mapRect (RectF rect)

Added in API level 1

Apply this matrix to the rectangle, and write the transformed rectangle back into it. This is accomplished by transforming the 4 corners of rect, and then setting it to the bounds of those points

Parameters
rect RectF: The rectangle to transform.
Returns
boolean the result of calling rectStaysRect()

public void mapVectors (float[] dst, float[] src)

Added in API level 1

Apply this matrix to the array of 2D vectors specified by src, and write the transformed vectors into the array of vectors specified by dst. The two arrays represent their "vectors" as pairs of floats [x, y]. Note: this method does not apply the translation associated with the matrix. Use mapPoints(float[], float[]) if you want the translation to be applied.

Parameters
dst float: The array of dst vectors (x,y pairs)
src float: The array of src vectors (x,y pairs)

public void mapVectors (float[] vecs)

Added in API level 1

Apply this matrix to the array of 2D vectors, and write the transformed vectors back into the array. Note: this method does not apply the translation associated with the matrix. Use mapPoints(float[]) if you want the translation to be applied.

Parameters
vecs float: The array [x0, y0, x1, y1, ...] of vectors to transform.

public void mapVectors (float[] dst, int dstIndex, float[] src, int srcIndex, int vectorCount)

Added in API level 1

Apply this matrix to the array of 2D vectors specified by src, and write the transformed vectors into the array of vectors specified by dst. The two arrays represent their "vectors" as pairs of floats [x, y]. Note: this method does not apply the translation associated with the matrix. Use mapPoints(float[], int, float[], int, int) if you want the translation to be applied.

Parameters
dst float: The array of dst vectors (x,y pairs)
dstIndex int: The index of the first [x,y] pair of dst floats
src float: The array of src vectors (x,y pairs)
srcIndex int: The index of the first [x,y] pair of src floats
vectorCount int: The number of vectors (x,y pairs) to transform

public boolean postConcat (Matrix other)

Added in API level 1

Postconcats the matrix with the specified matrix. M' = other * M

Parameters
other Matrix
Returns
boolean

public boolean postRotate (float degrees)

Added in API level 1

Postconcats the matrix with the specified rotation. M' = R(degrees) * M

Parameters
degrees float
Returns
boolean

public boolean postRotate (float degrees, float px, float py)

Added in API level 1

Postconcats the matrix with the specified rotation. M' = R(degrees, px, py) * M

Parameters
degrees float
px float
py float
Returns
boolean

public boolean postScale (float sx, float sy)

Added in API level 1

Postconcats the matrix with the specified scale. M' = S(sx, sy) * M

Parameters
sx float
sy float
Returns
boolean

public boolean postScale (float sx, float sy, float px, float py)

Added in API level 1

Postconcats the matrix with the specified scale. M' = S(sx, sy, px, py) * M

Parameters
sx float
sy float
px float
py float
Returns
boolean

public boolean postSkew (float kx, float ky, float px, float py)

Added in API level 1

Postconcats the matrix with the specified skew. M' = K(kx, ky, px, py) * M

Parameters
kx float
ky float
px float
py float
Returns
boolean

public boolean postSkew (float kx, float ky)

Added in API level 1

Postconcats the matrix with the specified skew. M' = K(kx, ky) * M

Parameters
kx float
ky float
Returns
boolean

public boolean postTranslate (float dx, float dy)

Added in API level 1

Postconcats the matrix with the specified translation. M' = T(dx, dy) * M

Parameters
dx float
dy float
Returns
boolean

public boolean preConcat (Matrix other)

Added in API level 1

Preconcats the matrix with the specified matrix. M' = M * other

Parameters
other Matrix
Returns
boolean

public boolean preRotate (float degrees)

Added in API level 1

Preconcats the matrix with the specified rotation. M' = M * R(degrees)

Parameters
degrees float
Returns
boolean

public boolean preRotate (float degrees, float px, float py)

Added in API level 1

Preconcats the matrix with the specified rotation. M' = M * R(degrees, px, py)

Parameters
degrees float
px float
py float
Returns
boolean

public boolean preScale (float sx, float sy)

Added in API level 1

Preconcats the matrix with the specified scale. M' = M * S(sx, sy)

Parameters
sx float
sy float
Returns
boolean

public boolean preScale (float sx, float sy, float px, float py)

Added in API level 1

Preconcats the matrix with the specified scale. M' = M * S(sx, sy, px, py)

Parameters
sx float
sy float
px float
py float
Returns
boolean

public boolean preSkew (float kx, float ky, float px, float py)

Added in API level 1

Preconcats the matrix with the specified skew. M' = M * K(kx, ky, px, py)

Parameters
kx float
ky float
px float
py float
Returns
boolean

public boolean preSkew (float kx, float ky)

Added in API level 1

Preconcats the matrix with the specified skew. M' = M * K(kx, ky)

Parameters
kx float
ky float
Returns
boolean

public boolean preTranslate (float dx, float dy)

Added in API level 1

Preconcats the matrix with the specified translation. M' = M * T(dx, dy)

Parameters
dx float
dy float
Returns
boolean

public boolean rectStaysRect ()

Added in API level 1

Returns true if will map a rectangle to another rectangle. This can be true if the matrix is identity, scale-only, or rotates a multiple of 90 degrees.

Returns
boolean

public void reset ()

Added in API level 1

Set the matrix to identity

public void set (Matrix src)

Added in API level 1

(deep) copy the src matrix into this matrix. If src is null, reset this matrix to the identity matrix.

Parameters
src Matrix

public boolean setConcat (Matrix a, Matrix b)

Added in API level 1

Set the matrix to the concatenation of the two specified matrices and return true.

Either of the two matrices may also be the target matrix, that is matrixA.setConcat(matrixA, matrixB); is valid.

In GINGERBREAD_MR1 and below, this function returns true only if the result can be represented. In HONEYCOMB and above, it always returns true.

Parameters
a Matrix
b Matrix
Returns
boolean

public boolean setPolyToPoly (float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount)

Added in API level 1

Set the matrix such that the specified src points would map to the specified dst points. The "points" are represented as an array of floats, order [x0, y0, x1, y1, ...], where each "point" is 2 float values.

Parameters
src float: The array of src [x,y] pairs (points)
srcIndex int: Index of the first pair of src values
dst float: The array of dst [x,y] pairs (points)
dstIndex int: Index of the first pair of dst values
pointCount int: The number of pairs/points to be used. Must be [0..4]
Returns
boolean true if the matrix was set to the specified transformation

public boolean setRectToRect (RectF src, RectF dst, Matrix.ScaleToFit stf)

Added in API level 1

Set the matrix to the scale and translate values that map the source rectangle to the destination rectangle, returning true if the the result can be represented.

Parameters
src RectF: the source rectangle to map from.
dst RectF: the destination rectangle to map to.
stf Matrix.ScaleToFit: the ScaleToFit option
Returns
boolean true if the matrix can be represented by the rectangle mapping.

public void setRotate (float degrees)

Added in API level 1

Set the matrix to rotate about (0,0) by the specified number of degrees.

Parameters
degrees float

public void setRotate (float degrees, float px, float py)

Added in API level 1

Set the matrix to rotate by the specified number of degrees, with a pivot point at (px, py). The pivot point is the coordinate that should remain unchanged by the specified transformation.

Parameters
degrees float
px float
py float

public void setScale (float sx, float sy, float px, float py)

Added in API level 1

Set the matrix to scale by sx and sy, with a pivot point at (px, py). The pivot point is the coordinate that should remain unchanged by the specified transformation.

Parameters
sx float
sy float
px float
py float

public void setScale (float sx, float sy)

Added in API level 1

Set the matrix to scale by sx and sy.

Parameters
sx float
sy float

public void setSinCos (float sinValue, float cosValue)

Added in API level 1

Set the matrix to rotate by the specified sine and cosine values.

Parameters
sinValue float
cosValue float

public void setSinCos (float sinValue, float cosValue, float px, float py)

Added in API level 1

Set the matrix to rotate by the specified sine and cosine values, with a pivot point at (px, py). The pivot point is the coordinate that should remain unchanged by the specified transformation.

Parameters
sinValue float
cosValue float
px float
py float

public void setSkew (float kx, float ky, float px, float py)

Added in API level 1

Set the matrix to skew by sx and sy, with a pivot point at (px, py). The pivot point is the coordinate that should remain unchanged by the specified transformation.

Parameters
kx float
ky float
px float
py float

public void setSkew (float kx, float ky)

Added in API level 1

Set the matrix to skew by sx and sy.

Parameters
kx float
ky float

public void setTranslate (float dx, float dy)

Added in API level 1

Set the matrix to translate by (dx, dy).

Parameters
dx float
dy float

public void setValues (float[] values)

Added in API level 1

Copy 9 values from the array into the matrix. Depending on the implementation of Matrix, these may be transformed into 16.16 integers in the Matrix, such that a subsequent call to getValues() will not yield exactly the same values.

Parameters
values float

public String toShortString ()

Added in API level 1

Returns
String

public String toString ()

Added in API level 1

Returns a string containing a concise, human-readable description of this object. Subclasses are encouraged to override this method and provide an implementation that takes into account the object's type and data. The default implementation is equivalent to the following expression:

   getClass().getName() + '@' + Integer.toHexString(hashCode())

See Writing a useful toString method if you intend implementing your own toString method.

Returns
String a printable representation of this object.

Protected Methods

protected void finalize ()

Added in API level 1

Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.

Throws
Throwable