का उपयोग करके अपने केंद्र के बारे में एंड्रॉइड लेआउट दृश्य घुमाएं यहां बताया गया है कि मेरे सेट को घुमाने के लिए कैसे सेट अप किया गया है।टच श्रोता
मैं कार्रवाई के लिए सुन रहा नीचे और रोटेशन आइकन पर ले जाते हैं, रोटेशन के कोण की गणना करने की कोशिश कर और 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;
}
लेकिन परिणामस्वरूप घूर्णन गड़बड़ है और वांछित चिकनी नहीं है। इसके अलावा, अगर मैं स्टिकर को एक अलग स्थान पर ले जाता हूं, तो मैं रोटेशन के लिए नए केंद्र को कैसे अपडेट करूं, स्टिकर को स्थानांतरित करने के बाद घूर्णन नाटकीय रूप से घूर्णन के केंद्र को बदल देता है। मैं एक और अधिक चिकनी रोटेशन कैसे प्राप्त कर सकता हूं?