当前位置: 首页 > 知识库问答 >
问题:

Android,帮助触摸旋转图像

孙辰阳
2023-03-14

我正在尝试旋转此图像上的一个透明PNG。数字部分是我想要旋转的。我有能力做到这一点,但这不是我想要实现的

我想像在真正的密码锁上一样旋转数字。因此,用户将触摸并移动他们的手指在一个圆圈中。我查看了触摸/移动事件中不太精确的图像旋转,它们是不够的。

这是目前我的代码

 public boolean onTouch(View v, MotionEvent event) {
    double r=Math.atan2(event.getX()-lockNumbers.getWidth(), lockNumbers.getHeight()-event.getY());
    int rotation=(int)Math.toDegrees(r);
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_MOVE:
            x=event.getX();
            y=event.getY();
            updateRotation(rotation);
            break;
        case MotionEvent.ACTION_UP:
            break;
    }//switch       

    return true;

}//onTouch
private void updateRotation(double rot){
    float newRot=new Float(rot);
    Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.numbers);
    Matrix matrix=new Matrix();
    matrix.postRotate(newRot,bitmap.getWidth(),bitmap.getHeight());
    if(y>250){
        Bitmap reDrawnBitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
        lockNumbers.setImageBitmap(reDrawnBitmap);
    }
    else{
        Bitmap reDrawnBitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
        lockNumbers.setImageBitmap(reDrawnBitmap);
    }
}

由于矩阵参数的原因,当您触摸位图时,它也会调整位图的大小。这不是想要的效果。

用户几乎需要用手指绕一圈。

共有3个答案

符畅
2023-03-14

我假设您想在用户触摸屏幕时旋转图像?如果是这样,请像下面这样扩展 SimpleOnGestureListener

public class MyGestureDetector extends SimpleOnGestureListener
{  
     @Override
     public void onLongPress(MotionEvent event)
     {
         int X = (int)event.getX();          
         int Y = (int)event.getY();

         ...Rotate the image
     }
}

一旦你有了触摸事件的屏幕坐标,你可以应用一个旋转动画点-看到这里更多的细节:http://developer.android.com/guide/topics/graphics/2d-graphics.html

彭博厚
2023-03-14

通过接受@Dipak Keshariya的回答,我正在努力获得角度旋转,这可以帮助您识别车轮的选定部分。

private float copy[] = new float[9];
    matrix.getValues(copy);
float wheelAngle = Math.round(Math.atan2(copy[Matrix.MSKEW_X],
                copy[Matrix.MSCALE_X]) * (180 / Math.PI));
蓝逸仙
2023-03-14

将以下代码写入您的触摸事件。

switch (event.getAction()) {    
    case MotionEvent.ACTION_DOWN:
        // reset the touched quadrants
        for (int i = 0; i < quadrantTouched.length; i++) {
            quadrantTouched[i] = false;
        }
        allowRotating = false;
        startAngle = getAngle(event.getX(), event.getY());
        break;
    case MotionEvent.ACTION_MOVE:
        double currentAngle = getAngle(event.getX(), event.getY());
        rotateDialer((float) (startAngle - currentAngle));
        startAngle = currentAngle;
        break;
    case MotionEvent.ACTION_UP:
        allowRotating = true;
        break;
}

// set the touched quadrant to true
quadrantTouched[getQuadrant(event.getX() - (dialerWidth / 2), dialerHeight - event.getY() - (dialerHeight / 2))] = true;
detector.onTouchEvent(event);
return true;

并使用下面的链接以获得更多参考。

旋转拨号器示例

 类似资料:
  • 我被以下问题困住了,需要您的帮助来解决它。如有任何指导,我们将不胜感激。 场景:我在曲面视图的顶部有一个覆盖视图,这个覆盖视图有两个图像和一个按钮。我已经在这个活动的清单文件中将“方向”标志设置为“横向”,并编写了一个方向侦听器来识别横向左方向和横向右方向。 问题:当我打开可访问性模式并将内容描述正确设置为小部件时,在初始模式(无论是向左还是向右横向)中,当我按下任何图像时,我都会正确听到可访问性

  • 线段变形工作流程和触摸支持 路径线段变形工作流程已得到增强,现已支持在基于触摸的设备上通过触摸输入改变形状。 在早期版本的 Illustrator 中,使用“直接选择”工具可以改变曲线路径线段的形状,但其手柄始终会被限制为原始角度。现在,线段变形不受任何限制。此外,要将直线线段转换为曲线路径,现在只需拖动线段本身即可。改变路径线段的形状有三种方法。 钢笔工具 使用“钢笔”工具时,按住 Alt/Op

  • 有没有人知道如何正确旋转NV21图像字节[]保留其颜色信息正确。

  • 工作区布局和基础知识 触控工作区是一种经过改良的全新工作区,它简单、直观,专门为在运行 Windows 8 且支持触控的设备上使用而设计。该工作区经过优化,能够简便、快速且有效地实现触控交互。 Illustrator CC 中的新触控工作区(2014 年 10 月) A. 应用程序栏 B. 工具栏 C. 控制面板栏 D. 文档栏  该布局具有更简洁的界面,使您可以舒适地使用光笔,指尖可以轻松敲到触

  • 问题内容: 我正在开发一个Android应用程序,希望在其中滑动手指即可滑动图像。我已经实现了可以滑动图像的,但是我不知道如何实现手指触摸功能。 请给我建议任何方法,如何用手指滑动图像。任何建议或任何教程或方法都将有所帮助。 问题答案: 您可以使用onTouchListner方法代替onClickListner。下面给出了onTouchListners示例。

  • 问题内容: 我想找出悬停时如何制作 旋转或旋转的图像 。我想知道如何在以下代码上使用 CSS 模仿该功能: 问题答案: 您可以将CSS3过渡与一起使用,以 在悬停时旋转图像 。 旋转图像: