您的位置:首页 > 移动开发 > Android开发

Android Api demo系列(24) (Graphics>RoundRects(讲解的是GradientDrawable的使用))

2017-09-18 17:44 387 查看

GradientDrawable

GradientDrawable的效果和我们的xmlshape是一样的,支持渐变,圆角等。

先看构造方法;
mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF });
orientation指定了渐变的方向(以下八种),渐变的颜色由colors数组指定,数组中的每个值为一个颜色。
/**
* 控制渐变相对于可绘制边界的方向
*/
public enum Orientation {
/** 从顶部到底部绘制渐变*/
TOP_BOTTOM,
/** draw the gradient from the top-right to the bottom-left */
TR_BL,
/** 从右向左绘制渐变 */
RIGHT_LEFT,
/** 绘制从右下角到左上角的渐变 */
BR_TL,
/** 从下到上绘制渐变 */
BOTTOM_TOP,
/** 绘制从左下角到右上角的渐变 */
BL_TR,
/** 从左到右绘制渐变 */
LEFT_RIGHT,
/** 绘制从左上角到右下角的渐变 */
TL_BR,
}


分别使用Liner,Radial 和Sweep三种渐变模式,并配合指定矩形四个角圆角半径,显示GradientDrawable的不同用法:

@Override protected void onDraw(Canvas canvas) {

mDrawable.setBounds(mRect);

float r = 16;

canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
setCornerRadii(mDrawable, r, r, 0, 0);
mDrawable.draw(canvas);
canvas.restore();

canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
setCornerRadii(mDrawable, 0, 0, r, r);
mDrawable.draw(canvas);
canvas.restore();

canvas.translate(0, mRect.height() + 10);

canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
setCornerRadii(mDrawable, 0, r, r, 0);
mDrawable.draw(canvas);
canvas.restore();

canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
setCornerRadii(mDrawable, r, 0, 0, r);
mDrawable.draw(canvas);
canvas.restore();

canvas.translate(0, mRect.height() + 10);

canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
setCornerRadii(mDrawable, r, 0, r, 0);
mDrawable.draw(canvas);
canvas.restore();

canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
setCornerRadii(mDrawable, 0, r, 0, r);
mDrawable.draw(canvas);
canvas.restore();
}


还允许设置矩形四个角为圆角,每个圆角的半径可以分别设置:

public void setCornerRadii(float[] radii)

radii 数组分别指定四个圆角的半径,每个角可以指定[X_Radius,Y_Radius],四个圆角的顺序为左上,右上,右下,左下。如果X_Radius,Y_Radius为0表示还是直角。

static void setCornerRadii(GradientDrawable drawable, float r0,
float r1, float r2, float r3) {
drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
r2, r2, r3, r3 });
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: