
我已经在画布上使用绘制了三次曲线
myPath.cubicTo(10, 10, w, h/2, 10, h-10);我在该屏幕上有四个ImageVIEw,并且当我触摸拖动该图像时,我想在绘制的曲线上移动该ImageVIEw.
我已经提到了链接:
Move Image on Curve Path
Move object on Curve
Move imageview on curve
我得到的是,动画以t定义的持续时间在“曲线”上移动图像.
但是我只想沿该曲线区域的方向移动该ImageVIEw.
以下是我的屏幕:
因此,我希望曲线的所有(x,y)坐标仅在该曲线上移动ImageVIEw.
否则,我希望方程式画一条曲线,以便我可以将x值内插为触摸的y值.
我凝视了很多,但没有成功.
任何建议或指导都会对我有很大帮助.
解决方法:
途径
我建议使用一种不同于使用贝塞尔曲线的方法,因为您需要为其重现数学才能获得位置.
通过使用简单的三角函数,您可以获得相同的视觉效果,但同时可以完全控制位置.
三角
例如:
THIS ONLINE DEMO产生此结果(为演示起见,为简化版本):
用圆和角位置而不是y和x位置定义一个数组.您可以稍后过滤角度(例如,仅显示-90到90度之间的角度).
使用角度将确保它们在移动时保持秩序.
var balls = [-90, -45, 0, 45]; // example "positions"要替换贝塞尔曲线,可以改为:
/// some setup variablesvar xCenter = -80, /// X center of circle yCenter = canvas.height * 0.5, /// Y center of circle radius = 220, /// radius of circle x, y; /// to calculate line position/// draw half circlectx.arc(xCenter, yCenter, radius, 0, 2 * Math.PI);ctx.stroke();现在,我们可以使用鼠标移动/触摸等中的Y值在圆上移动:
/// for demo, mousemove - adopt as needed for touchcanvas.onmousemove = function(e) { /// get Y position which is used as delta to angle var rect = demo.getBoundingClIEntRect(); dlt = e.clIEntY - rect.top; /// render the circles in new positions render();}渲染遍历ball数组,并以其角度delta渲染它们:
for(var i = 0, angle; i < balls.length; i++) { angle = balls[i]; pos = getPosfromAngle(angle); /// draw circles etc. here}魔术功能是这样的:
function getPosfromAngle(a) { /// get angle from circle and add delta var angle = Math.atan2(delta - yCenter, radius) + a * Math.PI / 180; return [xCenter + radius * Math.cos(angle), yCenter + radius * Math.sin(angle)];}半径用作伪位置.您可以将其替换为实际的X位置,但坦率地说不需要.
在本演示中,为简单起见,我仅附加了鼠标移动.将鼠标移到画布上可以查看效果.
由于这是演示代码,因此并不是最佳的结构(背景和圆圈的单独渲染等).
随意采用和修改以适合您的需求.
总结以上是内存溢出为你收集整理的如何在Android中的触摸事件上在曲线上移动图像?全部内容,希望文章能够帮你解决如何在Android中的触摸事件上在曲线上移动图像?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)