Intereting Posts
Как изменить высоту макета как анимацию (программно) Добавление прорисовки на вид программно Как сделать сообщение http от android на сервере движка Google? Определение регулярного выражения javascript для Android Как удалить runnable из объекта обработчика, добавленного postDelayed? Как напрямую читать / записывать файлы с устройства и на устройство (например, эффект O_DIRECT-флага) на Java-пути? Публикация моей веб-службы RESTful в Интернете Предупреждение слишком много ссылок на атрибуты. Возможные причины? Почему Android сменяет «компилировать» задачу на «реализацию» в градиентной сборке? Строительство Valgrind для Android Галерея / AdapterView Реальное дочернее состояние Какой смысл декларировать-стиль? Каковы 37 пакетов Java API, которые могут быть обременены решением Oracle v4 в мае 2014 года? Glide не анимирует ImageView, загруженный из кеша Клавиатура скрывает EditTexts во фрагментах

Перемещение изображения по круговой траектории в android

У меня есть изображение, я хотел переместить его в круговом пути onClick() событие кнопки без анимации,

Я не знаю, как это сделать .. Любая помощь?


Это мой основной класс

 public class MainActivity extends Activity { MyAnimation animation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); animation =new MyAnimation (); } 

И я использую код, данный вами как

 public class MyAnimation extends Animation { float cx,cy,prevX,prevY,r; @Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); float angle = (float) (interpolatedTime * 2 * Math.PI); // r = radius, cx and cy = center point, a = angle (radians) float x = (float) (cx + r * Math.cos(angle)) ; float y = (float) (cy + r * Math.sin(angle)); float dx = prevX - x; float dy = prevY - y; prevX = x; prevY = y; t.getMatrix().setTranslate(dx, dy); } 

}

И это мой xml изображения, который я хотел перемещать в круговой форме.

 <ImageView android:id="@+id/myanimation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/ic_launcher" /> 

Solutions Collecting From Web of "Перемещение изображения по круговой траектории в android"

Я думаю, у вас есть два варианта: либо вы создаете пользовательскую анимацию, либо создаете свой ImageView, а затем используете поверхность, чтобы рисовать ее по пути самостоятельно.

Первый вариант намного проще, и, вероятно, даст лучшие результаты, учитывая, что в классе Animation время обрабатывается для вас с помощью Interpolators (Линейное время, начало работы, нормальный конец и т. Д.). Я настоятельно рекомендую вам написать пользовательскую анимацию, поскольку я не понимаю, почему вы не хотели бы использовать класс Animation (анимация изображения именно то, что вы хотите).

Редактирование : я потратил некоторое время и реализовал следующее. Это не безупречно, но олицетворяет изображение по круговой траектории.

Мероприятия:

 public class MainActivity extends Activity { private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.image); image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Animation anim = new MyAnimation(image, 100); anim.setDuration(3000); image.startAnimation(anim); } }); } } 

Класс анимации:

 public class MyAnimation extends Animation { private View view; private float cx, cy; // center x,y position of circular path private float prevX, prevY; // previous x,y position of image during animation private float r; // radius of circle private float prevDx, prevDy; /** * @param view - View that will be animated * @param r - radius of circular path */ public MyAnimation(View view, float r){ this.view = view; this.r = r; } @Override public boolean willChangeBounds() { return true; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { // calculate position of image center int cxImage = width / 2; int cyImage = height / 2; cx = view.getLeft() + cxImage; cy = view.getTop() + cyImage; // set previous position to center prevX = cx; prevY = cy; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if(interpolatedTime == 0){ t.getMatrix().setTranslate(prevDx, prevDy); return; } float angleDeg = (interpolatedTime * 360f + 90) % 360; float angleRad = (float) Math.toRadians(angleDeg); // r = radius, cx and cy = center point, a = angle (radians) float x = (float) (cx + r * Math.cos(angleRad)); float y = (float) (cy + r * Math.sin(angleRad)); float dx = prevX - x; float dy = prevY - y; prevX = x; prevY = y; prevDx = dx; prevDy = dy; t.getMatrix().setTranslate(dx, dy); } } 

XML-макет:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Вероятно, вам нужно настроить его здесь и там, чтобы получить то, что вы хотите точно, но это может быть основой для этого.