Oto, jak wygląda mój zestaw do obracania.Obróć widok układu Android o jego środku za pomocą słuchacza dotykowego
Słucham działania w dół i przesunąć ikonę rotacji, próbując obliczyć kąt obrotu i stosowania, że kąt obrotu do całego układu enkapsulacji EditText. Zastosowany obrót musi znajdować się wokół środka otaczającego względnego układu.
Oto, jak próbuję to osiągnąć w ikonie rotacji dla TouchListener.
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;
}
Ale wynikowy obrót jest glitchy, a nie zgodnie z życzeniem gładki. Ponadto, jeśli przeniesię naklejkę do innej lokalizacji, w jaki sposób zaktualizuję nowe centrum obrotu, ponieważ obrót po przeniesieniu naklejki radykalnie zmienia środek obrotu. Jak mogę osiągnąć znacznie bardziej płynną rotację?