//前段时间有个需求如下
//背景的那个蓝色的弧形,要怎么写,当时脑子闪现的就是贝塞尔曲线的弧形,刚好和其匹配,于是就尝试了一下
//写出来的效果图如下:
//是不是看起来很像
//1.0第一步是绘一个弧形view
代码如下:
class MyView extends View {
private Paint mPaint;
private Path mPath;
private Point startPoint;
private Point endPoint;
private Point assistPoint;
private int screenWidth;
private int screenHeigh;
public MyView(Context context) {
super(context);
//获取屏幕的宽高
getScreenArgs();
//初始化画笔,path等
initContext();
}
private void initContext() {
mPaint = new Paint();
mPaint.setColor(getResources().getColor(R.color.colorPrimary));
mPaint.setStrokeWidth(6);//设置画笔的粗细
mPath = new Path();
startPoint = new Point(0,0);//设置起点(可以自定义)
endPoint = new Point(screenWidth, 0);//设置终点(可以自己定)
assistPoint = new Point(screenWidth/2,screenHeigh/10);//设置中间辅助切线点
mPaint.setAntiAlias(true);// 抗锯齿
mPaint.setDither(true);// 防抖动,更清晰
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画笔重置
mPath.reset();
// 起点
mPath.moveTo(startPoint.x, startPoint.y);
// 开始画贝塞尔曲线
mPath.quadTo(assistPoint.x, assistPoint.y, endPoint.x, endPoint.y);
// 画路径
canvas.drawPath(mPath, mPaint);
}
public void getScreenArgs() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeigh = dm.heightPixels;
}
}
//其中的关键点就是起点和终点的两个点的坐标,这个可以自定义,也可以随着手指落下的时候获取
//中间的辅助点,就是在起点或者终点的y坐标上加一个固定值(屏幕高度的百分比)
//mainActivity的中代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView view = new MyView(this);
setContentView(view);
}