「抓一隻波波,當場變成百變怪」這在寶可夢是可能的,但鐵人賽沒機會,認真寫吧!
鐵人賽
Templates
現在來主要用在set各種paintValue吧跟實作功能!!!!
1.設定寬度
由外界傳入你要設定的寬度是多少,我主要用的是progress拖拉設定
invalidate是更新的部分會重新跑onDraw()
public void setWidth(int progress){
Log.d("qqqqq",""+(100F/progress)*10F+"progress"+progress);
paintValue.setPaintWidth((float) progress);
Log.d("qqqqQAQ",""+paintValue.getPaintWidth());
invalidate();
}
2.設定顏色跟透明度
主要是用ColorUtils方法可以將顏色跟想要的透明度結合
https://developer.android.com/reference/androidx/core/graphics/ColorUtils
public void setColor(int color,int transparent){
int chCl= ColorUtils.setAlphaComponent(color,transparent);
paintValue.setColor(chCl);
Log.d("coloraaaaaa","cl"+chCl);
invalidate();
}
3.設定橡皮擦
橡皮擦設計主要是看現在背景是甚麼顏色所第,要是是白色,橡皮擦就是白的筆
public void eraserIt(){
isEraser=!isEraser;
paintValue.setErase(isEraser);
invalidate();
}
注:PaintValue內記得多設一個是否用橡皮擦的boolean
且在MoveEvent.ActionUp內加上
if (isEraser){
pp.setColor(Color.WHITE);
}else {
pp.setColor(Color.BLACK);
}
4.跟IG很像的功能
常按一個點改變背景色
在MotionEvent.ACTION_DOWN加上:
downTime=event.getDownTime();
在MotionEvent.ACTION_MOVE加上
主要是判斷down跟move的點是不是很近,就是判斷是否按同一個點!!
是的話將畫布清空並改變背景色為畫筆當前顏色,橡皮擦顏色也改變為畫筆當前顏色
downTime的判斷為是否長按
if (((event.getEventTime()-downTime)>2000)&&( ((Math.abs(clickx-x)<30) &&(Math.abs(clicky-y)<30)) )){
linkedHashMap.clear();
lastHashMap.clear();
defaultEraserColor=paintValue.getColor();
Log.d("coloraaaaaa","defaultEraserColor"+defaultEraserColor);
setBackgroundColor(defaultEraserColor);
}
5.上一步
拿紀錄筆畫的map,最後一筆就是要上一步那個筆畫,將他移出map
而因為要實作下一步所以需要有個紀錄上一步掉的map加入被取消的筆畫
public void back(){
DrawPath path=getLastKey(linkedHashMap);
PaintValue paintValue=getLastValue(linkedHashMap);
Log.d("bacccccccc", "back: "+paintValue.getColor());
linkedHashMap.remove(path);
lastHashMap.put(path,paintValue);
invalidate();
}
注:如有錯記得加入這段
主要為判斷筆畫跟value是否為空
if ((paintValue!=null)&&(path!=null)){
lastHashMap.put(path,paintValue);
}
6.next 下一步
將之前紀錄消去筆畫的map在拿出最後一筆加回去之前的
一樣要紀錄map是否空值
public void next(){
DrawPath ph=getLastKey(lastHashMap);
PaintValue pv=getLastValue(lastHashMap);
Log.d("bacccccccc", "next: "+pv.getColor());
if ((ph!=null)&&(pv!=null)){
linkedHashMap.put(ph,pv);
lastHashMap.remove(ph);
invalidate();
}
}
map getLastValue 跟 getLastKey方法在這
public PaintValue getLastValue(Map<DrawPath,PaintValue> ll) {
PaintValue out = new PaintValue();
for (PaintValue key : ll.values() ){
out = key;
}
return out;
}
public DrawPath getLastKey(Map<DrawPath,PaintValue> ll) {
DrawPath out = null;
for (DrawPath key : ll.keySet()) {
out = key;
}
return out;
}