Android, help rotating image on touch

后端 未结 3 1232
情书的邮戳
情书的邮戳 2021-01-31 23:43

I am trying to rotate one of the transparent PNGs on this image. The number part is what I want to rotate. I am able to do this, but it is not what I am trying to achieve

相关标签:
3条回答
  • 2021-02-01 00:17

    Write below code into your touch event.

    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;
    

    And use below link for more reference.

    Rotate Dialer Example

    0 讨论(0)
  • 2021-02-01 00:25

    I presume you want to rotate an image at the point where a user touches the screen? If so, extend the SimpleOnGestureListener like this example:

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

    Once you've got the screen coordinates of the touch event, you could apply a Rotation Animation about the point - see here for more details: http://developer.android.com/guide/topics/graphics/2d-graphics.html

    0 讨论(0)
  • 2021-02-01 00:26

    By accepting @Dipak Keshariya's answer i am putting way to to get the angle rotation which can help you identify selected part of wheel.

    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));
    
    0 讨论(0)
提交回复
热议问题