支持圆形裁剪框,裁剪后生成圆形图案。
代码基于开源项目修改,github上项目链接:https://github.com/shengge/android-crop
还是贴下效果图:
说一下圆形裁剪实现部分:
1.UI方面,自定义CircleHighlightView继承至HighlightView(原有的矩形裁剪框实现),直接看draw方法实现
<div>
</div>
#### <a name="t4"></a>3). 缩放裁剪框
<div>
此过程和上一步类似,将cropRect矩阵进行等比缩放即可,这里就细说了,详见代码:HighLightView.growBy(float dx, float dy)
</div>
<div>
</div>
### <a name="t5"></a>3.将裁剪图片保存为圆形
<div>
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
**[java]** [view plain](http://blog.csdn.net/jiantao_yang/article/details/43635581#)<span class="tracking-ad" data-mod="popu_168"><span class="tracking-ad" data-mod="popu_168"> [copy](http://blog.csdn.net/jiantao_yang/article/details/43635581#)</span></span>
<div>
<embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_4">
</embed>
</div>
<span class="tracking-ad" data-mod="popu_167">[](https://code.csdn.net/snippets/600342)</span><span class="tracking-ad" data-mod="popu_170">[](https://code.csdn.net/snippets/600342/fork)</span></div> </div>
- <span class="comment">/**</span>
- <span class="comment"> * @param bitmap src图片</span>
- <span class="comment"> * @return</span>
- <span class="comment"> */</span>
- <span class="keyword">public</span> <span class="keyword">static</span> Bitmap getCircleBitmap(Bitmap bitmap) {
- Bitmap output = Bitmap.createBitmap( bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas canvas = <span class="keyword">new</span> Canvas( output);
-
- <span class="keyword">final</span> <span class="keyword">int</span> color = <span class="number">0xff424242</span>;
- <span class="keyword">final</span> Paint paint = <span class="keyword">new</span> Paint();
- <span class="keyword">final</span> Rect rect = <span class="keyword">new</span> Rect( <span class="number"></span>, <span class="number"></span>, bitmap.getWidth(), bitmap.getHeight());
-
- paint.setAntiAlias( <span class="keyword">true</span>);
- paint.setFilterBitmap( <span class="keyword">true</span>);
- paint.setDither( <span class="keyword">true</span>);
- canvas.drawARGB( <span class="number"></span>, <span class="number"></span>, <span class="number"></span>, <span class="number"></span>);
- paint.setColor( color);
- <span class="comment">//在画布上绘制一个圆</span>
- canvas.drawCircle( bitmap.getWidth() / <span class="number">2</span>, bitmap.getHeight() / <span class="number">2</span>, bitmap.getWidth() / <span class="number">2</span>, paint);
- paint.setXfermode( <span class="keyword">new</span> PorterDuffXfermode( Mode.SRC_IN));
- canvas.drawBitmap( bitmap, rect, rect, paint);
- <span class="keyword">return</span> output;
- }
</div>
注意:将bitmap保存为file时,格式请选择png,不然会出现黑色背景。
<div>
</div>
<div>
鉴于水平有限,从小语文就没学好,描述比较凌乱,需要深入理解的请阅读[源代码](http://download.csdn.net/detail/jiantao_yang/8433015)。
</div>
<div>
</div>
<div>
附:另外一个很好开源项目 https://github.com/edmodo/cropper
</div>
💬 评论