美文网首页
自定义view - 草稿

自定义view - 草稿

作者: 水固态中 | 来源:发表于2017-12-02 16:44 被阅读0次

    xml引用自定义view 包名+控件名

    <com.mycompany.myapphuizhi.NewButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    新建类,继承view,重写ondraw方法

    public class NewButton extends View {
      Paint paint = new Paint();//画笔
            //注意构造函数,最起码要实现这个attrs属性从xml传入
      public NewButton(Context context,  AttributeSet attrs) {
      super(context, attrs);
      }
      @Override
      public void draw(Canvas canvas) {
      //canvas画布
      super.draw(canvas);
            paint.setColor(Color.YELLOW);
      canvas.drawCircle(300, 300, 200, paint);
      }
    }

    坐标系

    自定义view - 草稿

    canvas画布

    底板

    canvas.drawRGB(100, 200, 100); 
    canvas.drawARGB(100, 100, 200, 100); 
    canvas.drawColor(Color.parseColor("#88880000")); // 半透明红色
    canvas.drawColor(Color.BLACK);  // 纯黑 

    形状

    drawCircle(centerX, centerY, radius, paint)

    paint画笔

    Paint.setStyle(Style style) 设置绘制模式

    paint.setStyle(Paint.Style.STROKE) 来把绘制模式改为画线模式。

    Style 具体来说有三 种: FILL, STROKE 和 FILL_AND_STROKE 。FILL 是填充模式,STROKE 是画线模式(即勾边模式),FILL_AND_STROKE 是两种模式一并使用:既画线又填充。它的默认值是 FILL,填充模式。

    自定义view - 草稿

    Paint.setColor(int color) 设置颜色

    默认黑色

    paint.setColor(Color.YELLOW);
    自定义view - 草稿

    Paint.setStrokeWidth(float width) 设置描边线条宽度

    在 STROKE 和 FILL_AND_STROKE 下,还可以使用 paint.setStrokeWidth(float width) 来设置描边线条的宽度:

    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(20); // 线条宽度为 20 像素 
    canvas.drawCircle(300, 300, 200, paint); 
    自定义view - 草稿

    抗锯齿

    在绘制的时候,往往需要开启抗锯齿来让图形和文字的边缘更加平滑。开启抗锯齿很简单,只要在 new Paint() 的时候加上一个 ANTI_ALIAS_FLAG 参数就行:

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    自定义view - 草稿

    Paint.setTextSize(float textSize) 设置文字大小

    Paint.setAntiAlias(boolean aa) 设置抗锯齿

    绘制顺序

    自定义view - 草稿

    背景,它的绘制发生在一个叫 drawBackground() 的方法里,但这个方法是 private 的,不能重写,你如果要设置背景,只能用自带的 API 去设置(xml 布局文件的 android:background 属性以及 Java 代码的 View.setBackgroundXxx() 方法,这个每个人都用得很 6 了),而不能自定义绘制;而第 4、5 两步——滑动边缘渐变和滑动条以及前景,这两部分被合在一起放在了 onDrawForeground() 方法里,这个方法是可以重写的。

    draw() 总调度方法

    // View.java 的 draw() 方法的简化版大致结构(是大致结构,不是源码哦):

    public void draw(Canvas canvas) { 
        ...
        drawBackground(Canvas); // 绘制背景(不能重写)
        onDraw(Canvas); // 绘制主体
        dispatchDraw(Canvas); // 绘制子 View
        onDrawForeground(Canvas); // 绘制滑动相关和前景
        ...
    }

    待续

    相关文章

      网友评论

          本文标题:自定义view - 草稿

          本文链接:https://www.haomeiwen.com/subject/ojwnbxtx.html