Android使用贝塞尔曲线画心形

Android使用贝塞尔曲线画心形

一开始我只是想画个圆,可画着画着就成了心形,那就将错就错

1. 创建一个Activity

RelativeLayout container = findViewById(R.id.download_container);    DisplayMetrics metrics = new DisplayMetrics();    getWindowManager().getDefaultDisplay().getMetrics(metrics);    deviceWidth = metrics.widthPixels;    deviceHeight = metrics.heightPixels;    Circle circle = new Circle(this, deviceWidth / 2, deviceHeight / 2, deviceWidth / 8);    Line line = new Line(this, deviceWidth / 2, deviceHeight / 2, deviceWidth / 8);    container.addView(line);

2. 创建一个自定义的View

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PointF;import android.view.View;public class Line extends View {    private Paint mPaint;    private PointF startPointF;    private PointF endPointF;    private PointF controlPointF1, controlPointF2;    private PointF startPointF2;    private PointF endPointF2;    private PointF controlPointF3, controlPointF4;    public Line(Context context, float x, float y, float radius) {        super(context);        double d = (2 * Math.sqrt(2) - 1);        this.startPointF = new PointF(x, y - radius);        this.endPointF = new PointF(x, y + radius / 10);        this.controlPointF1 = new PointF(x, (float) (y - d * radius));        this.controlPointF2 = new PointF((float) (x + d * radius), (float) (y - d * radius));        this.startPointF2 = new PointF(x, y - radius);        this.endPointF2 = new PointF(x, y + radius / 10);        this.controlPointF3 = new PointF(x, (float) (y - d * radius));        this.controlPointF4 = new PointF((float) (x - d * radius), (float) (y - d * radius));        this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        this.mPaint.setColor(Color.WHITE);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //绘制贝塞尔曲线        Path path = new Path();        path.moveTo(startPointF.x, startPointF.y);        path.cubicTo(controlPointF1.x, controlPointF1.y, controlPointF2.x, controlPointF2.y, endPointF.x, endPointF.y);        canvas.drawPath(path, mPaint);        path.moveTo(startPointF2.x, startPointF2.y);        path.cubicTo(controlPointF3.x, controlPointF3.y, controlPointF4.x, controlPointF4.y, endPointF2.x, endPointF2.y);        canvas.drawPath(path, mPaint);    }}

运行效果

Android使用贝塞尔曲线画心形_第1张图片

更多相关文章

  1. android多点触摸缩放图片
  2. android imageVIew拖动 && 图片缩放
  3. Android 圆角图片的实现
  4. Activity页面切换的效果
  5. 用SlidingDrawer实现类似android状态栏下拉上拉效果!
  6. Android中的Banner效果
  7. android listview 设置点击效果selector
  8. Android语音输入打字效果渐变以及纠错效果

随机推荐

  1. ‘void android.view.View.dispatchDetac
  2. (Android) Eclipse "launching delegate"
  3. Android写文件到Sd卡的一般过程
  4. android判断网络
  5. Android(安卓)获取手机的一些基本信息类
  6. android监听短信并判断是否未读
  7. Android(安卓)自定义BaseAdapter
  8. Android(安卓)Audio Subsystem - AudioTr
  9. android延时更新UI
  10. android SpannableString使用详解