Android开发中,在自定义view中,使用Canvas的相应操作,实现类似签名的画板,但有一个问题则是,正常的Canvas操作可以用画板对手机的滑动进行绘制,但是当遇到一些圆滑曲线时,会显得不够顺滑,甚至有折角,这里可以使用二阶beizer曲线来使得曲线更加圆滑,提升用户体验。
定义一个自定义SignView,继承自View,在里面定义四个变量:
private Path mPath; private Paint mPaint; private float mX; private float mY;
在构造方法里对路径和画笔进行初始化:
public SignView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(10); mPath = new Path(); }
在onDraw()中对canvas做操作,这里值得一提的是调用drawColor方法,不然最终如果保存为本地图片的话,会使得背景为黑色,如果画笔也选择黑色的话,则会成一张全黑的图片:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawPath(mPath, mPaint); }
接下来重写onTouchEvent方法:
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mX = event.getX(); mY = event.getY(); mPath.moveTo(mX, mY); break; case MotionEvent.ACTION_MOVE: float x1 = event.getX(); float y1 = event.getY(); float cx = (x1 + mX) / 2; float cy = (y1 + mY) / 2; mPath.quadTo(mX, mY, cx, cy); mX = x1; mY = y1; break; } invalidate(); return true; }
手指按下时,取得按下的坐标,移动的时候,得到当前左边,且取两点中间的cx,cy作为beizer曲线的控制点,然后调用quadTo方法绘制二阶beizer曲线,进行连线操作,最终则是调用invalidate方法进行重绘。
这样一个使连线更加圆滑的画板控件简单实现了,如果需要保存为本地,或者bitmap对象,则需要做其他一些额外的操作了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
创建一个形状为椭圆的曲线。 将xRadius与yRadius设为相等的值它将会成为一个圆。 代码示例 const curve = new THREE.EllipseCurve( 0, 0, // ax, aY 10, 10, // xRadius, yRadius 0, 2 * Math.PI, // aStartAngle, aEndA
本文向大家介绍C#画笔Pen绘制光滑模式曲线的方法,包括了C#画笔Pen绘制光滑模式曲线的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#画笔Pen绘制光滑模式曲线的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
问题内容: 我正在尝试实现ECDSA(椭圆曲线数字签名算法),但是在Java中找不到使用Bouncy Castle的示例。我创建了密钥,但是我真的不知道我应该使用哪种功能来创建签名并进行验证。 问题答案: owlstead是正确的。要详细说明,您可以执行以下操作: 并验证:
问题内容: 我正在尝试为椭圆曲线创建自己的库。有些事情行得通,但有些则行不通。 要根据私钥计算公钥,应将生成器点乘以私钥,然后得到另一个点:公钥点(ECPoint = BigInteger * ECPoint)。 现在,我有一个私钥,并将其与Secp256k1曲线的生成器点相乘。我得到一个钥匙,但这不是我应该得到的钥匙。 这是我的JAVA代码: 我的代码有问题吗?secp256k1是否有特定的乘法
我们刚刚已经在节点上挂载了动画剪辑,现在我们可以在动画剪辑中创建一些动画曲线了。 我们首先了解一下动画属性,动画属性包括了节点自有的 position、rotation 等属性,也包含了组件 Component 中自定义的属性。 组件包含的属性前会加上组件的名字,比如 cc.Sprite.spriteFrame。 比如下图的 position 那条就是属性轨道,而对应的蓝色菱形就是关键帧。 添加一
我们已经创建了基本的动画了。 但有时候我们会需要在两帧之间实现 EaseInOut 等缓动效果,那么在动画编辑器中怎么实现呢? 我们首先需要在一条轨道上创建两个不相等的帧,比如在 position 上创建两帧,从 0,0 到 100,100。 这时候两帧之间会出现一根连接线(连接关键帧之间的蓝色线段),双击连接线,可以打开曲线编辑器。 曲线编辑器打开时,如果当前的动画曲线数据是预设里的,左边的预设