前言
創(chuàng)新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站制作、成都網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的蘇尼特右網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!支持圓形裁剪框,裁剪后生成圓形圖案。
代碼基于開源項目修改,github上項目鏈接:https://github.com/shengge/android-crop (本地下載)
還是貼下效果圖:
說一下圓形裁剪實現部分:
1.UI方面,自定義CircleHighlightView繼承至HighlightView(原有的矩形裁剪框實現),直接看draw方法實現
@Override protected void draw(Canvas canvas) { canvas.save(); Path path = new Path(); outlinePaint.setStrokeWidth( outlineWidth); if(!hasFocus()) {//沒焦點是,直接畫一個黑色的矩形框 outlinePaint.setColor( Color.BLACK); canvas.drawRect( drawRect, outlinePaint); } else { Rect viewDrawingRect = new Rect(); viewContext.getDrawingRect( viewDrawingRect); //已裁剪框drawRect,算出圓的半徑 float radius = (drawRect.right - drawRect.left) / 2; //添加一個圓形 path.addCircle( drawRect.left + radius, drawRect.top + radius, radius, Direction.CW); outlinePaint.setColor( highlightColor); //裁剪畫布,path之外的區(qū)域,以outsidePaint填充 canvas.clipPath( path, Region.Op.DIFFERENCE); canvas.drawRect( viewDrawingRect, outsidePaint); canvas.restore(); //繪制圓上高亮線,這里outlinePaint定義的Paint.Style.STROKE:表示只繪制幾何圖形的輪廓。 canvas.drawPath( path, outlinePaint); //當modifyMode為grow時,繪制handles,也就是那四個小圓 if(handleMode == HandleMode.Always || (handleMode == HandleMode.Changing && modifyMode == ModifyMode.Grow)) { drawHandles( canvas); } } }