2017-08-09 16 views
7

का उपयोग करके अपने केंद्र के बारे में एंड्रॉइड लेआउट दृश्य घुमाएं यहां बताया गया है कि मेरे सेट को घुमाने के लिए कैसे सेट अप किया गया है।टच श्रोता

enter image description here

मैं कार्रवाई के लिए सुन रहा नीचे और रोटेशन आइकन पर ले जाते हैं, रोटेशन के कोण की गणना करने की कोशिश कर और edittext encapsulating पूरे लेआउट के लिए रोटेशन की उस कोण को लागू करने। लागू रोटेशन रिश्तेदार लेआउट encapsulating के केंद्र के बारे में होना चाहिए।

यहां बताया गया है कि मैं इसे कैसे प्राप्त करने की कोशिश कर रहा हूं, टच लिस्टनर में रोटेशन आइकन के लिए।

if(v == ivRotateSticker){ 


     //TODO grab xc and yc using (top and bottom)/2 and (left and right)/2 to grab center of sticker after each rotation 
     final float x = event.getX(); 
     final float y = event.getY(); 
     rlTextStickerLayout.getGlobalVisibleRect(myViewRect); 
     xc = myViewRect.width()/2; 
     yc = myViewRect.height()/2; 

     dx = scaleReceiver.getWidth() - myViewRect.width(); 
     dy = scaleReceiver.getHeight() - myViewRect.height(); 

     leftBound = scaleReceiver.getX(); 
     topBound = scaleReceiver.getY(); 

     switch (event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 
       mViewAngle = rlTextStickerLayout.getRotation(); 
       mPrevAngle = Math.toDegrees(Math.atan2(x - xc, yc - y)); 

       break; 

      case MotionEvent.ACTION_MOVE: 

       Log.d("EventRegistered", " " + event.getRawX() + "--" + dx + " -- " + dy); 

       mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y)); 
       if (x >= leftBound && y >= topBound && x <= dx && y <= dy) { 
        float rot = (float) (mViewAngle + mCurrAngle - mPrevAngle); 
        rlTextStickerLayout.setRotation((float) (mViewAngle + mCurrAngle - mPrevAngle)); 
        Log.d("stickerRotation"," "+rot); 
       } 
       break; 

     } 

     return true; 

    } 

लेकिन परिणामस्वरूप घूर्णन गड़बड़ है और वांछित चिकनी नहीं है। इसके अलावा, अगर मैं स्टिकर को एक अलग स्थान पर ले जाता हूं, तो मैं रोटेशन के लिए नए केंद्र को कैसे अपडेट करूं, स्टिकर को स्थानांतरित करने के बाद घूर्णन नाटकीय रूप से घूर्णन के केंद्र को बदल देता है। मैं एक और अधिक चिकनी रोटेशन कैसे प्राप्त कर सकता हूं?

उत्तर

0
  1. देखें के घूर्णन 1000ms में निर्दिष्ट मान (90, 180, 270) के लिए एनिमेटेड करने के लिए किया जा:

    view.animate() रोटेशन (90F) .setDuration (1000) .start();। view.animate()। रोटेशन (180 एफ) .setDuration (1000) .start(); view.animate()। रोटेशन (270 एफ) .setDuration (1000) .start();

  2. कर सकते हैं इस पुस्तकालय का उपयोग करके आप पूरे दृश्य पदानुक्रम बारी बारी से https://github.com/rongi/rotate-layout