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 }); }
相关文章推荐
- Android Api demo系列(24) (Graphics>shadow card drag)
- Android Api Demos登顶之路(七十五)Graphics-->GradientDrawable
- Android Api demo系列(22) (Graphics>Patterns)
- Android Api demo系列(18) (Graphics>AlphaBitmap)
- Android Api demo系列(15) (App>Fragment>FragmentAlertDialog高级使用)
- Android Api demo系列(28) (Graphics>Typefaces)
- Android Api demo系列(21) (Graphics>PathEffects)
- Android Api demo系列(27) (Graphics>Text Align)
- Android ApiDemos示例解析(64):Graphics->Drawable->GradientDrawable
- Android Api demo系列(25) (Graphics>shadow card stack)
- Android Api demo系列(19) (Graphics>AnimateDrawables)
- Android Api demo系列(20) (Graphics>clipping)
- Android Api demo系列(10) (App>Activity>SetWallpaperActivity)
- Android Api demo系列(3) (App>Activity>CustomTitle)
- Android Api demo系列(8) (App>Activity>Reorder acitivities>>intent.flag)
- Android Api demo系列(16) (App>Fragment>Fragment Hide Show)
- Android Api demo系列(11) (App>Alarm警报管理员)
- Android Api demo系列(6) (App>Activity>Presentation)
- Android Api demo系列(9) (App>Activity>SecureDialog)
- Android Api demo系列(5) (App>Activity>finishAffinity)