最近有项目上的需要,需要在相机中实现一个UI用于控制相机拍出照片的清晰或者模糊区域的大小。哎~,没什么文采,说不清楚,还是直接上效果图来的实在一点!!!
不要问我为什么同样的效果图给了两个,我会慢慢说明的!!
首先声明,这个动画不是我做的,如果想看原文的话,请跳转至下面这个链接:
http://blog.csdn.net/ha000/article/details/53376099
博主写的很好,就是有一点不是很好,博主在代码中使用path来进行视图的剪切,但是在绘制path的时候会产生锯齿,而画笔上的设置无法消除使用path剪切所造成的锯齿,很不美观,因此我被boss要求进行优化,也就是消除锯齿!!!
在进行图片的剪切或者说是抠图的时候,我们除了使用path以外,我们还可以使用Xfermode,通过使用Paint设置相关的模式完全可以达到抠图的目的,关于Xfermode将会在明天的博客中介绍,有兴趣的朋友可以关注一下我的博客!!
好了,扯了这么多也该上源码了,先看一下使用path进行抠图的源码:
ApertureView:
package com.example.apertureview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
/**
* Created by Administrator on 2017/6/15 0015.
*/
public class ApertureView extends View {
private Path mPath;
private Paint mPaint;
private int mWidth,mHeight;
private int mRadius;
private int mSpace = 6;
private PointF[] mPoints = new PointF[6];
private float mMaxApert = 1;
private float mMinApert = 0.2f;
private float mCurrentApert = 0.5f;
private Bitmap mBlade;
private int mBladeColor;
private int mCount = 6;
private float COS_30 = (float) Math.cos(30.0f/180*Math.PI);
public ApertureView(Context context) {
this(context,null);
}
public ApertureView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public ApertureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr,0);
this.setBackgroundColor(Color.GRAY);
}
public ApertureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mPaint = new Paint();
mPaint.setStrokeWidth(2);
mPath = new Path();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setFilterBitmap(true);
mBladeColor = Color.argb(200,255,0,0);
Log.i("zyq","COS_30="+COS_30);
for(int i = 0;i<6;i++){
mPoints[i]