自定义控件-----(第一节)

来源:互联网 发布:淘宝助理取消二次验证 编辑:程序博客网 时间:2024/06/06 16:58

这段时间比较充足,自入行以来,就一直有计划要补充一下自己在自定义控件方面的知识点,终于提到日程上了,后续会一直更新,先从基础开始对基本的绘制进行简单API的熟悉,下面不多说,直接上干货:奋斗奋斗奋斗

下面就是绘制的一些简单图形,先看一下效果图:(没有进行整理位置,注重的是如何绘制,简单实现,熟悉api即可)




接下来就是代码,想学习的要多练习,必须亲自上手敲,本人深有体验:(上面有些简单注释)

private Paint paint;private Paint paint2;private Paint paint3;float[] points = {0, 0, 30, 200, 50, 240, 100, 250, 140, 200, 150, 250, 150, 100};float[] points2 = {0, 0, 30, 200, 50, 240, 50, 240, 100, 250, 100, 250, 140, 200};private Paint paint4;public Rect_1_1_Demo(Context context) {    this(context, null);}public Rect_1_1_Demo(Context context, @Nullable AttributeSet attrs) {    this(context, attrs, 0);}public Rect_1_1_Demo(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    initView();}private void initView() {    paint = new Paint();    paint.setColor(Color.RED);    paint.setStrokeWidth(5);//设置线条宽度    paint.setStrokeCap(Paint.Cap.ROUND);    paint.setStyle(Paint.Style.STROKE);    paint2 = new Paint();    paint2.setColor(Color.BLACK);    paint2.setStrokeWidth(20);    paint2.setStrokeCap(Paint.Cap.SQUARE);    paint2.setStyle(Paint.Style.FILL);    paint3 = new Paint();    paint3.setColor(Color.RED);    paint3.setStyle(Paint.Style.FILL_AND_STROKE);    paint4 = new Paint();    paint4.setColor(Color.BLUE);    paint4.setTextSize(36);    paint4.setStrokeWidth(2);}@Overrideprotected void onDraw(Canvas canvas) {    super.onDraw(canvas);    canvas.drawRect(30, 30, 130, 130, paint);    canvas.drawRect(190, 30, 290, 130, paint2);    canvas.drawRect(350, 30, 450, 130, paint3);    canvas.drawPoint(510, 60, paint);    canvas.drawPoint(570, 60, paint2);    canvas.drawPoints(points, 2, 10, paint2);    canvas.drawOval(570, 200, 770, 350, paint);    canvas.drawLine(30, 300, 400, 280, paint);    canvas.drawLines(points2, 2, 12, paint);    canvas.drawRoundRect(30, 400, 300, 500, 20, 20, paint2);    canvas.drawRoundRect(400, 400, 670, 500, 20, 20, paint);    /**     * 对参数进行解释:     * float left,     * float top,     * float right,     * float bottom,     * float startAngle, 0-180度。0度代表数学的X轴正方向,正数代表扇形在下方,负数代表扇形在上方     * float sweepAngle,    正数代表扇形在下方,负数代表扇形在上方     * boolean useCenter    true表示画一个扇形,表示连接圆心,false表示画一条弧线,不连接圆心     */    canvas.drawArc(200, 600, 400, 800, 0, -90, true, paint);    canvas.drawArc(100, 600, 200, 700, 0, -90, false, paint);    //下面就是通过path来进行绘制    Path path = new Path();    //画圆    path.addCircle(600, 650, 50, Path.Direction.CW);    path.addCircle(675, 650, 50, Path.Direction.CW);    path.addCircle(750, 650, 50, Path.Direction.CW);    path.addCircle(825, 650, 50, Path.Direction.CW);    canvas.drawPath(path, paint);    Path path1 = new Path();    path1.moveTo(100, 800);    path1.lineTo(200, 900); // 由当前位置 (100, 800) 向 (300, 900) 画一条直线    path1.rLineTo(100, 0);  //继续上次结束的点为远点进行画线    canvas.drawPath(path1, paint);    //true 表示绘制下一个弧线的时候不会和上次绘制的直线进行相连,false则相反    Path path2 = new Path();    path2.moveTo(500, 800);    path2.lineTo(600, 900);    path2.arcTo(600, 800, 700, 900, 40, -120, true);    canvas.drawPath(path2, paint);    //close方法的使用,    Path path3 = new Path();    path3.moveTo(50, 1000);    path3.lineTo(180, 1000);    path3.rLineTo(100, 100);    path3.close();    canvas.drawPath(path3, paint);    //绘制图片    Bitmap girlBitmap = ((BitmapDrawable) getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap();    canvas.drawBitmap(girlBitmap, 300, 900, paint);    //绘制文字    canvas.drawText("canvas",500,1000,paint4);}

希望对大家有用,感谢感谢,勿喷勿喷!不想看清绕道!!!