自定义View 绘画,Sharder 瓦片模式

自定义View

① 是什么 ?

    就是自己写的一个View,可通过绘制,继承,组合 三种方式

② 怎么用

    首先写一个类继承自View,继承父类的三个构造方法
    在mxl 文件中引入这个类

    <com.example.liyang.customview.CustomView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#528b1d"
    />

自定义View 画图 设,P*(色,心,粗),布色,图,p

自定义View 类中 继承 View // view : 透明的
重写 构造方法,我们首先要 构造方法中递归调用,在第一个构造方法中,调用第二个构造方法,
再在第二个构造方法中调用第三个构造方法 ,以便于在第三个 构造方法中初始化Paint

    准备工作 :

    让前两个构造函数调用 第三个 构造函数
    在第三个构造函数中初始化 画笔 Paint

    paint = new Paint();


    1在 onDraw(Canvas canvas)先将画布置色 ,不然之前色易有残余       
    canvas.drawColor(Color.White);

    2 paint 可以设置颜色,画笔粗细,样式(实心,空心)
     paint.setStrokeWidth(10);
     paint.setColor(Color.BLACK);   
    paint.setStyle(Paint.Style.STROKE);// 或者 FILL 实心

    3.我们可以 利用 画笔 和 画布 去 进行绘画 (圆形,矩形,椭圆形..)

    canvas.drawPoint(100,100,paint);

    canvas.drawLine(200,200,400,400,paint);

    canvas.drawRect(300,300,600,700,paint);

    canvas.drawCircle(500,500,300,paint);

    canvas.drawArc(new RectF(200,500,600,900),0,90,true,paint);


    绘制多边形:三角形,正五星..
    绘制 多边形, 在绘制多边
    ① 构建Path 对象利用它的服务
    ② 利用 path moveTo() ; 与 lineTo() 方法进行绘制 
    ③ canvas.drawPath(path,paint);  // 画一下即可


    当然我们还可以使用 弧形去连接 两个点 
    path.arcTo(new RectF(100,100,200,200),0,90,true)


    最后我们还可以 画文字
    paint.setTextSize();
    canvas.drawText("",100,,100,paint);

    我们还可以得到 画笔 所划线的 顶部底部等,我们可以通过 
    Paint.FontMetrics metrics = paint.getFontMetrics(); 的属性进行
    文字的书写

    top bottom 基准线 leading 以基准线 为 y值坐标 写的这个文字 
    bttom 其实就是一个偏移量 

    实现文字恰好位于杠上:
    canvas.drawColor(Color.WHITE);
    Paint.FontMetrics metrics = paint.getFontMetrics();
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawRect(100,100,1000,300,paint);
    paint.setTextSize(50);
    canvas.drawText("测试下对齐了吗",100,100-metrics.bottom,paint);




    常用字体属性

载图,set pro post rst

载入图片

注意载入图片属于耗时操作 不能写在 onDraw()方法里

        BitmapFactory.deodeResource(context.getResource(),R.mipmap...);
        canvas.drawBitmap(bitmap,100,100,paint);

设置矩阵
Matric matrix = new Matrix(); // 12 种属性

![这里写图片描述](https://img-blog.csdn.net/20160328190509989)

通常我们画出来的圆 周边带有 锯齿 ,我们可以开启 抗锯齿,让他们模糊

        paint.setAntiAlias(true);

线性渐变 三种模式渐变 cmr

    LinearGradient linearGradient = new LinearGradient(100, 100, 500, 100, Color.RED, Color.BLUE, Shader.TileMode.CLAMP);

    paint.setShader(linearGradient);

sharder 瓦片模式

彩虹的多彩变化
彩虹色的属性是设置给 画笔的
paint.setSharder(线性,扇形(不存在某个点不在瓦片范围之内),环形(圆))

头像圆形 用sharder 来做 画布移动 与矩阵恢复

有两种 瓦片模式 ,水平 和 垂直 方向上 都有可能超过 图片的范围

        SweepGradient sweepGradient = new SweepGradient(getWidth() / 2, getHeight() / 2,
            new int[]{0xffff0000,0xffff8800,0xffffff00,0xff00ff00,0xff00ffff,0xff0000ff,0xffff00ff},
            new float[]{0,1.0f/6,2.0f/6,3.0f/6,4.0f/6,5.0f/6,1});

    paint.setShader(sweepGradient);

    BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    paint.setShader(bitmapShader);
    int cir = bitmap.getWidth() / 2;

    canvas.save();
    //移动我们的画布 达到 头像移动的目的 那要是 多个头像呢
    canvas.translate(500-cir,500-cir);

    paint.setAntiAlias(true);
    canvas.drawCircle(cir,cir,cir,paint);

    //恢复上一次矩阵
    canvas.restore();
    canvas.drawCircle(cir,cir,cir,paint);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值