Вопрос по android-animation, android – Как создать элемент управления вращающимся колесом?

20

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

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

Акаши

Я попробовал туториал по ссылке, упомянутой в вопросе, в котором изображения прорисованы, но я хочу работать с изображениями из ресурса. И обрабатывать там события кликов. AkashG
Проверьте этот пример: Android SDK: создание вращающейся звонилки Paresh Mayani
Эт может помочь. Также проверьте этот пример. Andrei Aulaska
@ PareshMayani это тот же пример, который я реализовал из Mindtherobot.com / блог / WP-содержание / добавления / 2010/07 / dialview.zip. Можете ли вы помочь мне, делясь кодом кольца / круга, разделенного на равные части. Вращая эти разделенные части и обрабатывая события кликов. AkashG

Ваш Ответ

3   ответа
2

через который я получил три события, а именно:

MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE & MotionEvent.ACTION_UP.

On MotionEvent.ACTION_DOWN получил угол, где пользователи касаются, а MotionEvent.ACTION_UP - угол, где пользователь выпускает.

Получив разницу двух углов, повернул изображение на этот угол.

После поворота изображения проверил квадрант на угол и сохранил переменную int, которая увеличивалась в соответствии с квадрантом и, выполняя условие, устанавливала новое изображение (желаемое).

Получил событие click в соответствии со значением переменной int.

Вы также должны добавить пример кода ... Pankaj Kumar
@ hardikjoshi Я просто использую концепцию, предложенную pareshmayani, в которой вы сможете вращать изображение, мое требование состояло в том, чтобы вращать окружность, имеющую различные участки изображения, и получать положение каждого раздела во время вращения изображения. AkashG
0

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

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"

    />

2

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

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

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

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

И ваш код не является представлением, как я могу изменить его на представление? Так что я могу добавить его в XML. Xar E Ahmer
Я застрял в создании вращающейся ручки, которая поворачивается на 150 - 210 градусов. Можете ли вы помочь мне, пожалуйста, посмотрите мой вопрос здесь / Stackoverflow.com вопросы / 27728913 / ... Xar E Ahmer

Похожие вопросы