介绍完Android动画后再介绍Android绘画。
Paint与Canvas
像我们平时画图一样,需要两个工具,纸和笔。Paint就是相当于笔,而Canvas就是纸,这里叫画布。
所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明度,字体的样式等等,都是在Paint里设置;同样,凡是要画出成品的东西,比如圆形,矩形,文字等相关的都是在Canvas里生成。
本篇用到的类如下:
android.graphics.Canvas
Canvas指画布,表现在屏幕上就是一块区域,可以在上面使用各种API绘制想要的东西。
android.graphics.Color
android内置的颜色,比如系统资源中定义的颜色,有BLACK(黑色),BLUE(蓝色),CYAN(青色),GRAY(灰色),GREEN(绿色),RED(红色),WRITE(白色),YELLOW(黄色)等
当然android的android.graphics.Color也提供了构造自定义颜色的静态方法。颜色值的定义是由透明度alpha和RGB(红绿蓝)三原色来定义的,以“#”开始,后面依次为:透明度-红-绿-蓝,
android.graphics.Paint
在自定义组件中,Paint类是一个很重要的类,主要包含颜色、文本、图形样式、位图模式、滤镜等几个方面。
android.graphics.Rect
android.graphics.RectF
这两个类区别不大,表示一个矩形,总结来说就是用左上角的坐标和右下角的坐标来表示一个矩形。
Paint常用方法如下:
方法 | 描述 |
---|---|
Paint() | 构造方法 |
void setAntiAlias(boolean aa) | 抗锯齿功能 |
void setColor(int color) | 设置画笔颜色 |
void setStyle(Style style) | 设置填充格式 |
void setStrokeWidth(float width) | 设置画笔宽度 |
void setShadowLayer(float radius, float dx, float dy, int shadowColor) | 设置阴影 |
void setTextSize(float textSize) | 设置文字字体 |
void setFakeBoldText(boolean fakeBoldText) | 设置字体是否粗体 |
Canvas常用方法如下:
方法 | 描述 |
---|---|
void drawRGB(int r, int g, int b) | 设置画布颜色 |
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) | 画线 |
void drawCircle(float cx, float cy, float radius, Paint paint) | 画圆 |
void drawPoint(float x, float y, Paint paint) | 画点 |
void drawRect(float left, float top, float right, float bottom, Paint paint) | 画直角矩形 |
void drawRoundRect(RectF rect, float rx, float ry, Paint paint) | 画圆角矩形 |
void drawOval(RectF oval, Paint paint) | 画椭圆形 |
void drawArc(RectF oval, float strAngle, float sweepAngle, boolean, useCenter, Paint paint) | 画扇形(弧线) |
void drawPath(Path path, Paint paint) | 画路径 |
void drawText(String text, float x, float y, Paint paint) | 画文字 |
void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) | 画图片 |
运行后的效果:
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</FrameLayout>
MyView文件:
package com.example.drawdomo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.View;
public class MyView extends View {
Context mContext;
Paint paint_circle;
Paint paint_line;
Paint paint_point;
Paint paint_rect;
Paint paint_Oval;
Paint paint_Arc;
public MyView(Context context) {
super(context);
mContext = context;
paint_circle = new Paint();
paint_line = new Paint();
paint_point = new Paint();
paint_rect = new Paint();
paint_Oval = new Paint();
paint_Arc = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//设置画笔基本属性
paint_circle.setAntiAlias(true); //抗锯齿功能
paint_circle.setColor(Color.RED); //设置画笔颜色
paint_circle.setStyle(Paint.Style.FILL); //设置填充样式
paint_circle.setStrokeWidth(5); //设置画笔宽度
paint_circle.setShadowLayer(10,15,15,Color.GREEN); //设置阴影
//设置画布背景颜色
canvas.drawRGB(10,20,200);
//画圆
canvas.drawCircle(190,200,150,paint_circle);
paint_line.setColor(Color.YELLOW);
paint_line.setStyle(Paint.Style.FILL);
paint_line.setStrokeWidth(5);
//画线
canvas.drawLine(100,100,200,200,paint_line);
paint_point.setColor(Color.BLUE);
paint_point.setStyle(Paint.Style.FILL);
paint_point.setStrokeWidth(20);
//画点
canvas.drawPoint(200,200,paint_point);
paint_rect.setColor(Color.BLACK);
paint_rect.setStyle(Paint.Style.FILL);
paint_rect.setStrokeWidth(15);
//画矩形
canvas.drawRect(10,400,100,490,paint_rect);
Rect rect = new Rect(230,400,320,490);
canvas.drawRect(rect,paint_rect);
//画圆角矩形
RectF rectF = new RectF(120,400,210,490);
canvas.drawRoundRect(rectF,30,30,paint_rect);
paint_Oval.setColor(Color.GRAY);
paint_Oval.setStyle(Paint.Style.STROKE);
paint_Oval.setStrokeWidth(5);
RectF rectF_Oval = new RectF(340,400,550,490);
canvas.drawRect(rectF_Oval,paint_Oval);
paint_Oval.setColor(Color.GREEN);
canvas.drawOval(rectF_Oval,paint_Oval);
paint_Arc.setColor(Color.RED);
paint_Arc.setStyle(Paint.Style.STROKE);
paint_Arc.setStrokeWidth(5);
//画扇形
RectF rectF_Arc1 = new RectF(10,500,110,600);
canvas.drawArc(rectF_Arc1,0,90,true,paint_Arc);
//画弧线
RectF rectF_Arc2 = new RectF(120,500,240,600);
canvas.drawArc(rectF_Arc2,0,90,false,paint_Arc);
}
}
Activity文件:
package com.example.drawdomo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.FrameLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout root = (FrameLayout) findViewById(R.id.root);
root.addView(new MyView(MainActivity.this));
}
}
Domo代码: