studio rotate android animation rotation android-animation image-rotation
link

android studio rotate



¿Cómo crear un control de rueda giratoria? (4)

Aplicado en OnTouchListener en imageView a través del cual obtuve tres eventos, a saber:

  1. MotionEvent.ACTION_DOWN ,
  2. MotionEvent.ACTION_MOVE &
  3. MotionEvent.ACTION_UP .

En MotionEvent.ACTION_DOWN obtuvo el ángulo donde se tocan los usuarios y en MotionEvent.ACTION_UP obtuvo el ángulo donde se lanzan los usuarios.

Después de obtener la diferencia de los dos ángulos, giró la imagen de ese ángulo.

Después de rotar la imagen, se verificó el cuadrante a través del ángulo y se mantuvo la variable int, que se incrementó de acuerdo con el cuadrante y al cumplir con la condición establecida la nueva imagen (la deseada).

Se mantuvo el evento de clic de acuerdo con el valor de la variable int.

Estoy tratando de implementar la rueda giratoria en Android, al igual que la imagen que se muestra a continuación. Encontré el tutorial de este link . Pero quiero implementar tal como se muestra en la imagen de abajo. La rueda consiste en imágenes individuales. ¿Alguien tiene alguna idea con respecto a esta implementación? Cualquier ayuda sería apreciada.

Gracias por adelantado.

Akash


Aquí está el código completo para esto:

import android.animation.ObjectAnimator; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.graphics.Matrix; import android.view.View; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.util.Random; public class MainActivity extends Activity{ // Button rotate; ImageView i; ImageView ii; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); i= (ImageView) findViewById(R.id.i); i.setImageResource(R.drawable.gg); ii= (ImageView) findViewById(R.id.ii); ii.setImageResource(R.drawable.gg); // i.setBackgroundColor(Color.rgb(255, 255, 255)); } public void ii(View v) { RotateAnimation rotate = //new RotateAnimation(0f,generateRandomNumber(),55f,55f); new RotateAnimation(0, generateRandomNumber(), Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setDuration(1500); rotate.setInterpolator(new LinearInterpolator()); i.startAnimation(rotate); i.setRotation(generateRandomNumber()); RotateAnimation rotate1 = //new RotateAnimation(0f,generateRandomNumber(),55f,55f); new RotateAnimation(0, 999999999, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate1.setDuration(99999); rotate1.setInterpolator(new LinearInterpolator()); // i= (ImageView) findViewById(R.id.i); // i.setImageResource(R.drawable.g); ii.startAnimation(rotate1); /*i= (ImageView) findViewById(R.id.i); i.setImageResource(R.drawable.g); ObjectAnimator animator = ObjectAnimator.ofFloat(i,"rotationY", 360f); animator.setDuration(1000); animator.start(); */ /* Matrix matrix = new Matrix(); i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); //required matrix.postRotate(generateRandomNumber()); i.setImageMatrix(matrix); */ /* Matrix matrix = new Matrix(); Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.g); matrix.postRotate(generateRandomNumber()); Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), matrix, true); i.setImageBitmap(bMapRotate);*/ } public float generateRandomNumber() { Random rand = new Random(); int randomNum = rand.nextInt((10000000 - 125000) + 1); return (float)randomNum; } int backpressed=0; @Override public void onBackPressed() { backpressed++; if(backpressed>1) { super.onBackPressed(); finish(); } else { Toast.makeText(this, "Press back again to exit", Toast.LENGTH_LONG).show(); new Thread(new Runnable() { @Override public void run() { try{ Thread.sleep(2000);} catch (Exception e) { e.printStackTrace(); } backpressed=0; } }); } } }

Aquí está el XML:

tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=".............." android:textColor="#00ff10" android:textStyle="bold" android:textSize="25dp" android:layout_gravity="center"/> <ImageView android:layout_width="200dp" android:layout_height="80dp" android:layout_gravity="center" android:src="@drawable/a" /> <ImageView android:layout_width="300dp" android:layout_height="300dp" android:layout_gravity="center" android:id="@+id/i" /> <DigitalClock android:layout_width="100dp" android:layout_height="50dp" android:layout_gravity="center"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Play" android:backgroundTint="#ff0044" android:id="@+id/rotate" android:layout_gravity="center" android:onClick="ii"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="powered by ashwani" android:textColor="#00ff10" android:textStyle="bold" android:layout_gravity="center"/> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:id="@+id/ii" />



Para hacer esto desde cero, necesitarías una forma de transformar tus coordenadas táctiles, en coordenadas polares (para tener el ángulo de rotación). Esto se puede hacer fácilmente así:

private float cartesianToPolar(float x, float y) { return (float) -Math.toDegrees(Math.atan2(x - 0.5f, y - 0.5f)); }

Para rotar la vista de imagen, o el elemento que está utilizando para mostrar su mando, puede usar una matriz como esta:

Matrix matrix=new Matrix(); ivRotor.setScaleType(ScaleType.MATRIX); matrix.postRotate((float) deg, m_nWidth/2, m_nHeight/2);//getWidth()/2, getHeight()/2); ivRotor.setImageMatrix(matrix);

Donde grado es el ángulo e ivRobor es el botón de vista de imagen.

Una muestra de trabajo completa para Android, está disponible en el código de Google en: https://code.google.com/p/android-rotaryknob-view/