2012-07-10 34 views
6

मैं इस छवि पर पारदर्शी पीएनजी में से एक को घुमाने की कोशिश कर रहा हूं। संख्या भाग वह है जिसे मैं घूमना चाहता हूं। मैं यह कर सकता हूँ, लेकिन ऐसा नहीं है कि मैं क्या हासिल करनाएंड्रॉइड, स्पर्श पर छवि घूर्णन करने में मदद

http://i48.tinypic.com/25exzle.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); 
    } 
} 

यह भी बिटमैप जब आप इसे मैट्रिक्स पैरामीटर की वजह से स्पर्श का आकार बदलता है। यह वांछित प्रभाव नहीं है।

उपयोगकर्ता को अपनी अंगुली के साथ एक सर्कल में जाने की आवश्यकता होगी।

उत्तर

6

नीचे दिए गए कोड को अपने स्पर्श ईवेंट में लिखें।

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; 

और अधिक संदर्भ के लिए नीचे दिए गए लिंक का उपयोग करें।

Rotate Dialer Example

+0

ACTION_UP ईवेंट पर कितना रोटेशन किया गया है, मैं कैसे पता लगा सकता हूं? – IronBlossom

0

मुझे लगता है कि आप उस बिंदु पर एक छवि को घुमाने के लिए चाहते हैं जहां कोई उपयोगकर्ता स्क्रीन को छूता है? यदि हां, तो इस उदाहरण की तरह 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

+0

काफी नहीं, मैं मोशनइवेंट.एक्शन_MOVE का उपयोग कर रहा हूं, लांगप्रेस पर नहीं, और फिर फ्लाई पर छवि रोटेशन बदल रहा हूं। यह छूने, प्रतीक्षा करने और फिर घूर्णन एनीमेशन करने जैसा नहीं है। – CQM

1

@Dipak Keshariya's जवाब को स्वीकार करके मैं कोण रोटेशन जो मदद कर सकते हैं पहिया का हिस्सा चयनित पहचान पाने के लिए के लिए रास्ता डाल रहा हूँ।

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