一般我們的View都是矩形的畏吓,但是如果我們要裁剪成為其他的形狀呢闷旧?要如何做或详?是直接重寫onDraw畫出形狀脂信?還是什么呢枉氮?
例子
美圖秀秀的圖片拼圖脖律,如果你直接通過一個(gè)View進(jìn)行的話猛蔽,發(fā)現(xiàn)難度比較大善绎,因?yàn)閳D片移動(dòng)不影響附近的圖片黄刚,而且在附近的區(qū)域看不見的捎谨。說明他們是三個(gè)獨(dú)立的View。
如何裁剪
使用android 的Xfermode模式進(jìn)行裁剪憔维。在View和ViewGroup是不一樣的涛救,View直接在onDraw進(jìn)行,ViewGroup在dispathDraw進(jìn)行
@Override
protected void onDraw(Canvas canvas) {
//進(jìn)行canvas圖形運(yùn)算
canvas.saveLayer(0, 0, mWith, mHeight, mPaint, Canvas.ALL_SAVE_FLAG);
super.onDraw(canvas);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(makeDst(mWith, mHeight), 0, 0, mPaint);
mPaint.setXfermode(null);
}
本例子是我在面試一家公司時(shí)遇到的,那時(shí)候我拿出的方法是以上方法业扒。關(guān)鍵是检吆,那個(gè)裁剪的圖片,移動(dòng)并不出現(xiàn)在附近的View下面程储,所以不要被復(fù)雜化了蹭沛,是三個(gè)裁剪的ViewGroup后拼接在一起的。