Android-如何旋转图像

乌古尔·奥兹德米尔(Ugur Ozdemir)

我有一个图像及其在imageView中。我想添加一个功能,如果用户尝试将图像旋转到右侧,则允许用户旋转图像。例如,如果用户尝试将图像旋转到左侧,则它不会旋转。

在此处输入图片说明

这是我的转轮。

我尝试使用GestureDetector和onFling事件,但不足以让我检测用户是否尝试将其旋转到右侧或左侧。我怎样才能做到这一点 ?

编辑:

            var normalVectorX = e2?.x!! - 515
            var normalVectorY = e2?.y!! - 515

            var tangentVectorX  = -normalVectorY
            var tangentVectorY = normalVectorX

            var tangentVectorLength = (Math.sqrt(Math.pow((515 - e2?.y!!).toDouble(), 2.0)) + Math.pow((e2?.x!! - 515).toDouble(), 2.0))

            var unitTangentX = tangentVectorX / tangentVectorLength
            var unitTangentY = tangentVectorY / tangentVectorLength

            var scalarProjection = (velocityX * unitTangentX) + (velocityY * unitTangentY)

            if (scalarProjection > 0) // Right Side
                spinWheel((spinCountX * 360).toFloat() + 360 - (mPrizeIndex * 60) , 12000)

这是基于答案伪代码的代码实现。515 =车轮中心。

莫里斯

onFling为您提供MotionEvent相应猛击手势的。然后getX(int)您可以调用getY(int)获取坐标。

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  float x = e2.getX(0);  // Assuming you only care about the first finger
  float y = e2.getY(0);
  if (x < imageView.getWidth() / 2) {
    // fling is on the left side
  } else {
    // fling is on the right side
  }
}

旁注:我认为如果猛击是水平的,上面的代码将表现得不自然。如果您希望旋转手势更真实,我认为计算切向分量会更好

编辑:这是计算切向分量的方式。

您可能需要计算在触摸事件所在的点处速度矢量在圆的单位切线上标量投影

伪代码:

velocityVector = (velocityX, velocityY)
locationOfTouch = (e2.getX(0), e2.getY(0))
centerOfWheel = (166, 155)  # Measured from your image
normalVector = locationOfTouch - centerOfWheel
             = (locationOfTouch.x - centerOfWheel.x, locationOfTouch.y - centerOfWheel.y)

为了获得顺时针切线向量,我们取法线向量,交换X和Y分量,并取反X(来自2D欧几里得向量旋转)。

tangentVector = (-normalVector.y, normalVector.x)
unitTangent = tangentVector / tangentVector.length()

最后,使用点积获得标量投影:

scalarProjection = velocityVector.dotProduct(unitTangent)
                 = (velocityVector.x * unitTangent.x) + (velocityVector.y * unitTangent.y)

如果scalarProjection为正,则表示甩动手势为顺时针方向。如果为负,则表示手势为逆时针方向。

另外,由于我们使用单位切线,因此标量投影还表示顺时针旋转的速度,因此您可以将旋转动画更改为更快或更慢,或设置阈值以使该方向不会触发车轮旋转。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android:将ImageView中的图像旋转90度,但不延迟

来自分类Dev

Android图像/视频错误地逆时针旋转90度

来自分类Dev

画廊中的图像会自动旋转-Android

来自分类Dev

Android应用中旋转图像时出现问题

来自分类Dev

Android:旋转并显示文件中的图像

来自分类Dev

Android获得旋转位图。(图像拉直)

来自分类Dev

保存之前如何在android camera预览应用中旋转图像?

来自分类Dev

Android-使用OpenCV4Android旋转图像

来自分类Dev

Android onPictureTaken导致质量较差/旋转图像错误

来自分类Dev

Java / Android:点击屏幕左侧/右侧,连续旋转ImageView图像

来自分类Dev

如何在Android中旋转图像并在按下按钮时随机停止图像

来自分类Dev

Android-旋转按钮内的图像

来自分类Dev

Android:如何使用壁画旋转图像

来自分类Dev

图像可绘制旋转无法正常工作的Android吗?

来自分类Dev

画布旋转后图像模糊,仅在Android 6中

来自分类Dev

在Android中删除旋转的图像不会显示删除正确的路径

来自分类Dev

旋转图像中心而不是android中的宽圆圈

来自分类Dev

使用Glide旋转屏幕android设备时图像模糊

来自分类Dev

如何保存旋转图像?

来自分类Dev

画廊中的图像会自动旋转-Android

来自分类Dev

android设备上的图像旋转问题

来自分类Dev

Android图像旋转:在任意位置结束

来自分类Dev

图像视图移动和旋转的Android动画

来自分类Dev

如何在Android中设置边框和旋转位图图像?

来自分类Dev

Android库-android-crop旋转捕获的图像

来自分类Dev

如何自动旋转图像

来自分类Dev

如何在Android中旋转图像并在按下按钮时随机停止图像

来自分类Dev

Android - 使用 Exif 修复图像旋转

来自分类Dev

Android:相机活动,图像旋转

Related 相关文章

热门标签

归档