Android Api Demos登顶之路(八十七)Graphics-->RoundRect
2015-10-07 06:44
573 查看
/* * GradientDrawable可以用于绘制渐变的图形,本例演示了用该类绘制带圆角的矩形 */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new SampleView(this)); } private class SampleView extends View { private Paint mPaint; private Rect mRect; private GradientDrawable mDrawable; public SampleView(Context context) { super(context); setFocusable(true); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRect = new Rect(0, 0, 120, 120); // 定义赏渐变的图形,方向由左上到右下,颜色由红、绿、蓝渐变 mDrawable = new GradientDrawable( GradientDrawable.Orientation.TL_BR, new int[] { 0xffff0000, 0xff00ff00, 0xff0000ff }); // 设置渐变的图形 mDrawable.setShape(GradientDrawable.RECTANGLE); // 设置渐变的半径 mDrawable.setGradientRadius((float) Math.sqrt(2) * 60); } /** * 设置圆角 * * @param drawable * 需要设置圆角的矩形 * @param r0 * 左上角的半径 * @param r1 * 右上角的半径 * @param r2 * 左下角的半径 * @param r3 * 右下角的半径 */ private void setCornerRadii(GradientDrawable drawable, float r0, float r1, float r2, float r3) { // 分别设置四个圆角在横向和纵向上的半径 drawable.setCornerRadii(new float[] { r0, r0, r1, r1, r2, r2, r3, r3, }); } @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(); } } }
相关文章推荐
- 应届生百度android一面(失败)
- Android入门——利用Canvas完成绘制点、圆、直线、路径、椭圆、多边形等2D图形
- [Android] 关于Fragment 和 TabHost的学习笔记
- android(基于监听)的事件处理
- android gallery工作流程图
- AndroidManifest文件中的版本号与代码中得到的版本号不一致问题及解决办法
- android 读写SD问题
- android 多渠道打包(转)
- 从Android设备获取实时截屏(adb)
- android selector内标签顺序
- HashMap can be replaced with SparseArray--Android应用性能优化之使用SparseArray替代HashMap
- 提高Android Studio中Gradle执行效率
- Intent的两种具体实现
- Android:在EditView左边加入ImageView并调试相应位置,使其好看些
- Android解耦库EventBus的使用和源码分析
- 【ScrollView】Android ScrollView监听滑动事件
- Android启动Run As是报 Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE错误
- 收藏几个安卓镜像地址
- Framework of Android:Butterknife
- android源码编译出错(1)