Как создать управление вращающимся колесом?

Я пытаюсь реализовать Вращающееся колесо в андроиде, точно так же, как изображение, показанное ниже. Я наткнулся на учебник по этой ссылке . Но я хочу реализовать, как показано на рисунке ниже. Колесо состоит из отдельных изображений. Кто-нибудь есть идеи относительно этой реализации? Любая помощь будет оценена по достоинству.

Введите описание изображения здесь

Заранее спасибо.

Акаша

    Применяется на OnTouchListener на изображении, через который я получил три события: MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE & MotionEvent.ACTION_UP . На MotionEvent.ACTION_DOWN появился угол, в котором пользователи касаются и на MotionEvent.ACTION_UP получил угол, в котором пользователь отпускает. После получения разницы в двух углах повернул изображение этого угла. После поворота изображение проверило квадрант на угол и поддерживало int Переменная, которая увеличивается в соответствии с квадрантом и, выполняя условие, устанавливает новое изображение (желаемое). Сохраняло событие щелчка в соответствии со значением переменной int.

    Чтобы сделать это с нуля, вам понадобится способ трансформировать ваши сенсорные координаты в полярные координаты (чтобы иметь угол поворота). Это можно сделать так:

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

    Чтобы повернуть изображение или элемент, который вы используете, чтобы отобразить ручку, вы можете использовать такую ​​матрицу:

     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); 

    Где deg – это угол, а ivRobor – просмотр изображения на ручке.

    Полный рабочий образец для Android доступен в коде Google по адресу: https://code.google.com/p/android-rotaryknob-view/

    Проверь это. Его простая и базовая реализация на андроиде. Но вы можете развиваться поверх этого.

    https://github.com/lib4/RotateWheelAndroid_lib4

    Вот полный код для этого:

     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; } }); } } } 

    Вот 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" />