Android Canvas清屏失效

2021-08-15 07:40:38 字數 2451 閱讀 8233

自定義控制項時經常用到canvas,畫新的東西之前需要先清除畫布內容,人臉識別專案中需要準確畫出當前人臉位置,清空上一幀位置。

關於清除畫布內容網上有兩種非常流行的方法:

方法一:

mcanvas.drawcolor(color.transparent, porterduff.mode.clear);
方法二:

paint paint = new paint();

paint.setxfermode(new porterduffxfermode(porterduff.mode.clear));

mcanvas.drawpaint(paint);

paint.setxfermode(new porterduffxfermode(porterduff.mode.src));

遺憾的是這兩種方法在我自定義的su***ceview中都不起作用,嘗試結果如出一轍,左右晃一下 畫面如下:

我的解決方案是在每次設定path畫線前,清空一下path,問題迎刃而解。

清除path中的內容有兩個方法:

reset( )不保留內部資料結構,但會保留filltype.

rewind( )會保留內部的資料結構,但不保留filltype

關於path其他更多方法解釋詳見這篇部落格。

自定義su***ceview**如下:

/**

* title:

* description:

* company: 北京****科技****,010-62538800,[email protected]

* * @author created by ylwang on 2018/1/30

*/public class customsu***ceview extends su***ceview implements su***ceholder.callback, runnable

public customsu***ceview(context context, attributeset attrs)

public customsu***ceview(context context, attributeset attrs, int defstyleattr)

private gson gson;

private listlistfaces;

public void setfaceinfo(string faceinfo)

}private void initview()

@override

public void su***cecreated(su***ceholder holder)

@override

public void su***cechanged(su***ceholder holder, int format, int width, int height)

@override

public void su***cedestroyed(su***ceholder holder)

public static final int time_in_frame = 20;

@override

public void run()

//保證穩定幀率重新整理介面

while (systemclock.uptimemillis() - start <= time_in_frame) }}

private void setpathtocanvas()

mpath.close();//第乙個點連線到最後乙個點,形成乙個閉合區域

ps[1]);

drawsth();}}

/*** 獲取每個人臉的四點位置座標

** @param fre

* @return

*/private int getpositions(facebean.facesentity.face_rectangleentity fre)

}return faces;

}private void drawsth() catch (exception e) finally }}

}

說明一下,多個su***ceview疊加可能會遇到的問題,

請參考這篇部落格。

mholder = getholder();//獲取su***ceholder物件

//todo:保證該su***ceview在最上層,避免兩個su***ceview疊加,遮擋問題

mholder.setformat(pixelformat.transparent);

setzorderontop(true);

Android Canvas實際操作

本篇我們來看canvas的實際應用,這裡會應用到屬性動畫valueanimator類,下面先看一下具體的效果 上述效果圖中主要由三部分組成,第一,繪製6個小球並旋轉,第二,6個小球先擴充套件然後收縮,第三,水波紋效果,展示一張。1 旋轉部分 首先,將6個小球分別繪製到螢幕上,呼叫 canvas.dr...

Android canvas 監聽繪製電池電量

1 簡介 使用canvas 根據電池電量變化 繪製電池圖示 1 充電 顯示綠色 2 電量低於10 使用 紅色 3 其餘白色 2 自定義 batteryview override 設定 view 大小 protected void onmeasure int widthmeasurespec,int ...

Android Canvas繪製七巧板

心血來潮,封裝了乙個繪製彩色多邊形的方法,並用這個方法繪製了乙個七巧板 感覺繪製華容道太簡單了 如下 public class canvaspuzzle extends view public canvaspuzzle context context,attributeset attrs publi...