Android使用贝塞尔曲线画心形
更新时间:2022年06月29日 15:07:52 作者:「已注销」
这篇文章主要为大家详细介绍了Android使用贝塞尔曲线画心形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud)
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
本文实例为大家分享了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使用ContentProvider初始化SDK库方案小结
这篇文章主要介绍了Android使用ContentProvider初始化SDK库方案总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-04-04Android SDK Manager更新、下载速度慢问题解决办法
这篇文章主要介绍了Android SDK Manager更新、下载速度慢问题解决办法的相关资料,需要的朋友可以参考下2017-05-05Android onLoadFinished与onLoaderReset回调详解及实例
这篇文章主要介绍了Android onLoadFinished与onLoaderReset回调详解及实例的相关资料,需要的朋友可以参考下2017-03-03
最新评论