Android的code旋转触摸或拖动事件的图像视图 [英] Android code to rotate an image view on touch or drag event

查看:299
本文介绍了Android的code旋转触摸或拖动事件的图像视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在触摸和拖动旋转图像。现在我需要一个度,当用户preSS的的ImageView 和moove旋转,请帮助我一样。

I need to rotate an image on touch and drag. now i need a degree angle when user press the imageView and moove for rotating, kindly help me for the same.

imageView.setRotation(degree);

我需要这种程度的变量的值 MotionEvent.ACTION_MOVE块。

推荐答案

ü要使用RotateGestureDetector项目中的类如下。

u want use the RotateGestureDetector in your project class as below given..

public class RotateGestureDetector extends TwoFingerGestureDetector {

/**
 * Listener which must be implemented which is used by RotateGestureDetector
 * to perform callbacks to any implementing class which is registered to a
 * RotateGestureDetector via the constructor.
 * 
 * @see RotateGestureDetector.SimpleOnRotateGestureListener
 */
public interface OnRotateGestureListener {
    public boolean onRotate(RotateGestureDetector detector);
    public boolean onRotateBegin(RotateGestureDetector detector);
    public void onRotateEnd(RotateGestureDetector detector);
}

/**
 * Helper class which may be extended and where the methods may be
 * implemented. This way it is not necessary to implement all methods
 * of OnRotateGestureListener.
 */
public static class SimpleOnRotateGestureListener implements OnRotateGestureListener {
    public boolean onRotate(RotateGestureDetector detector) {
        return false;
    }

    public boolean onRotateBegin(RotateGestureDetector detector) {
        return true;
    }

    public void onRotateEnd(RotateGestureDetector detector) {
        // Do nothing, overridden implementation may be used
    }
}


private final OnRotateGestureListener mListener;
private boolean mSloppyGesture;

public RotateGestureDetector(Context context, OnRotateGestureListener listener) {
    super(context);
    mListener = listener;
}

@Override
protected void handleStartProgressEvent(int actionCode, MotionEvent event){
    switch (actionCode) {
        case MotionEvent.ACTION_POINTER_DOWN:
            // At least the second finger is on screen now

            resetState(); // In case we missed an UP/CANCEL event
            mPrevEvent = MotionEvent.obtain(event);
            mTimeDelta = 0;

            updateStateByEvent(event);

            // See if we have a sloppy gesture
            mSloppyGesture = isSloppyGesture(event);
            if(!mSloppyGesture){
                // No, start gesture now
                mGestureInProgress = mListener.onRotateBegin(this);
            } 
            break;

        case MotionEvent.ACTION_MOVE:
            if (!mSloppyGesture) {
                break;
            }

            // See if we still have a sloppy gesture
            mSloppyGesture = isSloppyGesture(event);
            if(!mSloppyGesture){
                // No, start normal gesture now
                mGestureInProgress = mListener.onRotateBegin(this);
            }

            break;

        case MotionEvent.ACTION_POINTER_UP:
            if (!mSloppyGesture) {
                break;
            }

            break; 
    }
}


@Override
protected void handleInProgressEvent(int actionCode, MotionEvent event){    
    switch (actionCode) {
        case MotionEvent.ACTION_POINTER_UP:
            // Gesture ended but 
            updateStateByEvent(event);

            if (!mSloppyGesture) {
                mListener.onRotateEnd(this);
            }

            resetState();
            break;

        case MotionEvent.ACTION_CANCEL:
            if (!mSloppyGesture) {
                mListener.onRotateEnd(this);
            }

            resetState();
            break;

        case MotionEvent.ACTION_MOVE:
            updateStateByEvent(event);

            // Only accept the event if our relative pressure is within
            // a certain limit. This can help filter shaky data as a
            // finger is lifted.
            if (mCurrPressure / mPrevPressure > PRESSURE_THRESHOLD) {
                final boolean updatePrevious = mListener.onRotate(this);
                if (updatePrevious) {
                    mPrevEvent.recycle();
                    mPrevEvent = MotionEvent.obtain(event);
                }
            }
            break;
    }
}

@Override
protected void resetState() {
    super.resetState();
    mSloppyGesture = false;
}


/**
 * Return the rotation difference from the previous rotate event to the current
 * event. 
 * 
 * @return The current rotation //difference in degrees.
 */
public float getRotationDegreesDelta() {
    double diffRadians = Math.atan2(mPrevFingerDiffY, mPrevFingerDiffX) - Math.atan2(mCurrFingerDiffY, mCurrFingerDiffX);
    return (float) (diffRadians * 180 / Math.PI);
}
}

其易于使用的类和有效旋转的..
我希望能有用。

its easy to use the class and effective rotate in that.. i hope to useful....

这篇关于Android的code旋转触摸或拖动事件的图像视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆