可以用Bitmap画刷填充Path来实现
/**
*CreatedbyCoder.Yanon/5/21.
*/
@SuppressWarnings("deprecation")
publicclassXORViewextendsView{
Paintpaint;
Pathpath;
BitmapShaderbrush;
publicXORView(Contextcontext,AttributeSetattrs){
super(context,attrs);
paint=newPaint();
path=newPath();
BitmapDrawabledrawable=(BitmapDrawable)getResources().getDrawable(R.drawable.ic_texture);
brush=newBitmapShader(drawable.getBitmap(),Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
canvas.save();
paint.setStyle(Paint.Style.FILL);
//paint.setColor(Color.GREEN);
paint.setShader(brush);
canvas.drawPath(path,paint);
paint.reset();
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path,paint);
canvas.restore();
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
path.reset();
intw=getWidth();
inth=getHeight();
path.moveTo(0,10);
path.arcTo(newRectF(0,0,20,20),180,90);
path.lineTo(w-30,0);
path.arcTo(newRectF(w-40,0,w-20,20),-90,90);
path.lineTo(w-20,h/2-10);
path.lineTo(w,h/2);
path.lineTo(w-20,h/2+10);
path.lineTo(w-20,h-10);
path.arcTo(newRectF(w-40,h-20,w-20,h-1),0,90);
path.lineTo(10,h-1);
path.arcTo(newRectF(0,h-20,20,h-1),90,90);
path.close();
}
}
效果图