嗨!今天來試著做一個小畫家吧
今日目標:做出畫畫的dataClass跟介紹Paint&&Path
先創一個class 讓他extends View
public class PPView extends View {...}
要畫畫這邊用到的是Paint可以想像是畫筆
Q:那畫筆可能要設定甚麼呢?
A1.像是 寬度 / 透明度 / 顏色 ..之類的 所以想創一個專門畫筆設定的class,
public class PaintValue {
public PaintValue() {
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public Float getPaintWidth() {
return paintWidth;
}
public void setPaintWidth(Float paintWidth) {
this.paintWidth = paintWidth;
}
private int color= Color.BLACK;
private Float paintWidth=10f;
public PaintValue(int color, Float paintWidth) {
this.color = color;
this.paintWidth = paintWidth;
}
}
A2.或是畫筆畫過的地方跟步伐,這邊也創一個class專門放畫過哪
因為跟畫過路徑相關所以要extends Path
還有因為是路徑要考慮第一筆第二筆..等等,所以我會用list讓他可以一筆筆放入
參考:https://developer.android.com/reference/android/graphics/Path
public class DrawPath extends Path {
private List<MovePath> pathLinkedList=new LinkedList<>();
...}
要override的方法
1.moveTo 筆從某一點移動到哪一點,不會有繪製的動作
@Override
public void moveTo(float x, float y) {
pathLinkedList.add(new MovePath(x,y));
super.moveTo(x, y);
}
2.lineTo.
畫出從哪一點到哪一點的線,預設的話都是從 (0,0)開始
@Override
public void lineTo(float x, float y) {
pathLinkedList.add(new MovePath(x,y));
super.lineTo(x, y);
}
注:所以如果要畫 從10,10 到 50,50的線
可以先用move移動到 10,10 在用 lineto 50,50 畫出來
3.quadeTo
是畫出圓滑的曲線,因為正常畫畫不可能只畫直線所以需要這個
@Override
public void quadTo(float x1, float y1, float x2, float y2) {
pathLinkedList.add(new MovePath(x1,y1,x2,y2));
super.quadTo(x1, y1, x2, y2);
}
4.MovePath只是一個dataClass,放 x,y ,moveX,moveY
public class MovePath {
public MovePath(Float x, Float y) {
this.x = x;
this.y = y;
}
public Float getX() {
return x;
}
public void setX(Float x) {
this.x = x;
}
public Float getY() {
return y;
}
public void setY(Float y) {
this.y = y;
}
public MovePath(Float x, Float y, Float moveX, Float moveY) {
this.x = x;
this.y = y;
this.moveX = moveX;
this.moveY = moveY;
}
private Float x;
private Float y;
private Float moveX;
private Float moveY;
}