Android的帮助触摸旋转图像图像、Android

由网友(朝思暮想丶想你的容颜)分享简介:我想旋转就这一形象的透明PNG图像之一。数量的部分是什么,我想旋转。我能够做到这一点,但它不是我所试图实现I am trying to rotate one of the transparent PNGs on this image. The number part is what I want to rotate....

我想旋转就这一形象的透明PNG图像之一。数量的部分是什么,我想旋转。我能够做到这一点,但它不是我所试图实现

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

我想旋转的数字像一个真正的密码锁。因此,用户将接触和移动自己的手指了一圈。我看着触摸/移动事件少precise图像旋转,他们是不够的。

I want to rotate the numbers like on a real combination lock. So the user will touch and move their finger in a circle. I looked at less precise image rotation on touch/move events, and they were not sufficient.

这是目前我的code

this is currently my code

 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);
    }
}

这也调整大小,当你触摸,因为矩阵参数它的位图。这是不期望的效果。

it also resizes the bitmap when you touch it because of the matrix parameter. This is not the desired effect.

用户将pretty的很多需要去用他们的手指了一圈。

The user will pretty much be required to go in a circle with their finger.

推荐答案

下面写下code到触摸事件。

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.

旋转拨号程序示例

阅读全文

相关推荐

最新文章