自定义View(一)Paint

1 颜色

Canvas绘制的内容,有三层对颜色的处理:


1.1 基本颜色

像素的基本颜色,根据绘制内容的不同而有不同的控制方式: Canvas 的颜色填充类方法 drawColor/RGB/ARGB() 的颜色,是直接写在方法的参数里,通过参数来设置的;drawBitmap() 的颜色,是直接由 Bitmap 对象来提供的.



LinearGradient 线性渐变

Shader shader = new LinearGradient(100, 100, 500, 500, Color.parseColor("#E91E63"),

        Color.parseColor("#2196F3"), Shader.TileMode.CLAMP);

paint.setShader(shader);

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



RadialGradient 辐射渐变

Shader shader = new RadialGradient(300, 300, 200, Color.parseColor("#E91E63"),

        Color.parseColor("#2196F3"), Shader.TileMode.CLAMP);

paint.setShader(shader);

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



参数:

centerX centerY:辐射中心的坐标

radius:辐射半径

centerColor:辐射中心的颜色

edgeColor:辐射边缘的颜色

tileMode:辐射范围之外的着色模式。


SweepGradient 扫描渐变

Shader shader = new SweepGradient(300, 300, Color.parseColor("#E91E63"),

        Color.parseColor("#2196F3"));

paint.setShader(shader);

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



构造方法:

SweepGradient(float cx, float cy, int color0, int color1)

参数:

cxcy:扫描的中心

color0:扫描的起始颜色

color1:扫描的终止颜色


ComposeShader 混合着色器

// 第一个 Shader:头像的 

BitmapBitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.batman); Shader shader1 = new BitmapShader(bitmap1, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

// 第二个 Shader:从上到下的线性渐变(由透明到黑色)

Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.batman_logo); Shader shader2 = new BitmapShader(bitmap2, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

// ComposeShader:结合两个 

ShaderShader shader = new ComposeShader(shader1, shader2, PorterDuff.Mode.SRC_OVER);

paint.setShader(shader);

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


具体见https://hencoder.com/

你可能感兴趣的:(自定义View(一)Paint)