package android.graphics;
public class LinearGradient extends Shader {
+
+ private static final int TYPE_COLORS_AND_POSITIONS = 1;
+ private static final int TYPE_COLOR_START_AND_COLOR_END = 2;
+
+ /**
+ * Type of the LinearGradient: can be either TYPE_COLORS_AND_POSITIONS or
+ * TYPE_COLOR_START_AND_COLOR_END.
+ */
+ private int mType;
+
+ private float mX0;
+ private float mY0;
+ private float mX1;
+ private float mY1;
+ private int[] mColors;
+ private float[] mPositions;
+ private int mColor0;
+ private int mColor1;
+
+ private TileMode mTileMode;
+
/** Create a shader that draws a linear gradient along a line.
@param x0 The x-coordinate for the start of the gradient line
@param y0 The y-coordinate for the start of the gradient line
if (positions != null && colors.length != positions.length) {
throw new IllegalArgumentException("color and position arrays must be of equal length");
}
+ mType = TYPE_COLORS_AND_POSITIONS;
+ mX0 = x0;
+ mY0 = y0;
+ mX1 = x1;
+ mY1 = y1;
+ mColors = colors;
+ mPositions = positions;
+ mTileMode = tile;
native_instance = nativeCreate1(x0, y0, x1, y1, colors, positions, tile.nativeInt);
native_shader = nativePostCreate1(native_instance, x0, y0, x1, y1, colors, positions,
tile.nativeInt);
*/
public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1,
TileMode tile) {
+ mType = TYPE_COLOR_START_AND_COLOR_END;
+ mX0 = x0;
+ mY0 = y0;
+ mX1 = x1;
+ mY1 = y1;
+ mColor0 = color0;
+ mColor1 = color1;
+ mTileMode = tile;
native_instance = nativeCreate2(x0, y0, x1, y1, color0, color1, tile.nativeInt);
native_shader = nativePostCreate2(native_instance, x0, y0, x1, y1, color0, color1,
tile.nativeInt);
}
- private native int nativeCreate1(float x0, float y0, float x1, float y1,
+ /**
+ * @hide
+ */
+ @Override
+ protected Shader copy() {
+ final LinearGradient copy;
+ switch (mType) {
+ case TYPE_COLORS_AND_POSITIONS:
+ copy = new LinearGradient(mX0, mY0, mX1, mY1, mColors.clone(), mPositions.clone(),
+ mTileMode);
+ break;
+ case TYPE_COLOR_START_AND_COLOR_END:
+ copy = new LinearGradient(mX0, mY0, mX1, mY1, mColor0, mColor1, mTileMode);
+ break;
+ default:
+ throw new IllegalArgumentException("LinearGradient should be created with either " +
+ "colors and positions or start color and end color");
+ }
+ copyLocalMatrix(copy);
+ return copy;
+ }
+
+ private native int nativeCreate1(float x0, float y0, float x1, float y1,
int colors[], float positions[], int tileMode);
private native int nativeCreate2(float x0, float y0, float x1, float y1,
int color0, int color1, int tileMode);