2017-08-09 74 views
7

Ayarlarımın nasıl döndürüleceğini buradan görebilirsiniz.Dokunarak dinleyiciyi kullanarak merkezinin merkezi hakkında android görünümü görünümünü döndürün

enter image description here

ben aşağı eylem için dinleme ve dönme açısını hesaplamak için çalışıyor, rotasyon ikonuna taşımak ve EditText enkapsüle tüm düzenine dönüş olduğunu açısını uyguluyorum. Uygulanan rotasyon, kapsülleyici göreli düzenin merkezi ile ilgili olmalıdır.

Simge, döndürme simgesi için touchListener uygulamasında bunu nasıl gerçekleştirmeye çalışıyorum.

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; 

    } 

Ancak sonuçta oluşan döndürme, sorunsuz ve istenildiği gibi değil. Ayrıca, etiketi farklı bir konuma taşırsam, etiketi hareket ettirdikten sonra rotasyon rotasyon merkezini önemli ölçüde değiştirdiğinden, rotasyon için yeni merkezi nasıl güncellerim. Çok daha düzgün bir dönüşe nasıl ulaşabilirim?

cevap

0
  1. görünümün dönme 1000MS belirtilen değerlere (90, 180, 270) için hareketli olmak:

    view.animate() rotasyon (90F) .setDuration (1000) .Start (.); view.animate(). Rotation (180f) .setDuration (1000) .start(); view.animate(). Rotation (270f) .setDuration (1000) .start();

  2. Eğer bütün görünümü hiyerarşi döndürmek Bu kütüphaneyi açabilir https://github.com/rongi/rotate-layout