Анимированная анимация Blackberry

Легко показать некоторую анимацию в одном поле – BitmapField или Screen:
[Blackberry – фоновое изображение / анимация RIM OS 4.5.0] [1]

Но что делать, если вам нужно переместить поля , а не только изображения?

Может быть использовано:

  • функциональность рабочего процесса игры, например, шахматы, головоломка и т. д.
  • приложение, определяемое пользователем, как в гаджетах Google
  • расширенные эффекты анимации графического интерфейса пользователя

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

Этот эффект может быть легко достигнут с помощью пользовательского макета:

class AnimatedManager extends Manager { int ANIMATION_NONE = 0; int ANIMATION_CROSS_FLY = 1; boolean mAnimationStart = false; Bitmap mBmpBNormal = Bitmap.getBitmapResource("blue_normal.png"); Bitmap mBmpBFocused = Bitmap.getBitmapResource("blue_focused.png"); Bitmap mBmpRNormal = Bitmap.getBitmapResource("red_normal.png"); Bitmap mBmpRFocused = Bitmap.getBitmapResource("red_focused.png"); Bitmap mBmpYNormal = Bitmap.getBitmapResource("yellow_normal.png"); Bitmap mBmpYFocused = Bitmap.getBitmapResource("yellow_focused.png"); Bitmap mBmpGNormal = Bitmap.getBitmapResource("green_normal.png"); Bitmap mBmpGFocused = Bitmap.getBitmapResource("green_focused.png"); int[] width = null; int[] height = null; int[] xPos = null; int[] yPos = null; BitmapButtonField mBButton = new BitmapButtonField(mBmpBNormal, mBmpBFocused); BitmapButtonField mRButton = new BitmapButtonField(mBmpRNormal, mBmpRFocused); BitmapButtonField mYButton = new BitmapButtonField(mBmpYNormal, mBmpYFocused); BitmapButtonField mGButton = new BitmapButtonField(mBmpGNormal, mBmpGFocused); public AnimatedManager() { super(USE_ALL_HEIGHT | USE_ALL_WIDTH); add(mBButton); add(mRButton); add(mYButton); add(mGButton); width = new int[] { mBButton.getPreferredWidth(), mRButton.getPreferredWidth(), mYButton.getPreferredWidth(), mGButton.getPreferredWidth() }; height = new int[] { mBButton.getPreferredHeight(), mRButton.getPreferredHeight(), mYButton.getPreferredHeight(), mGButton.getPreferredHeight() }; xPos = new int[] { 0, getPreferredWidth() - width[1], 0, getPreferredWidth() - width[3] }; yPos = new int[] { 0, 0, getPreferredHeight() - height[2], getPreferredHeight() - height[3] }; Timer timer = new Timer(); timer.schedule(mAnimationTask, 0, 100); } TimerTask mAnimationTask = new TimerTask() { public void run() { UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { updateLayout(); }; }); }; }; MenuItem mAnimationMenuItem = new MenuItem("Start", 0, 0) { public void run() { mAnimationStart = true; }; }; protected void makeMenu(Menu menu, int instance) { super.makeMenu(menu, instance); menu.add(mAnimationMenuItem); } public int getPreferredHeight() { return Display.getHeight(); } public int getPreferredWidth() { return Display.getWidth(); } protected void sublayout(int width, int height) { width = getPreferredWidth(); height = getPreferredHeight(); if (getFieldCount() > 3) { Field first = getField(0); Field second = getField(1); Field third = getField(2); Field fourth = getField(3); layoutChild(first, this.width[0], this.height[0]); layoutChild(second, this.width[1], this.height[1]); layoutChild(third, this.width[2], this.height[2]); layoutChild(fourth, this.width[3], this.height[3]); if (mAnimationStart) { boolean anim1 = performLayoutAnimation(0, width - this.width[0], height - this.height[0]); boolean anim2 = performLayoutAnimation(1, 0, height - this.height[1]); boolean anim3 = performLayoutAnimation(2, width - this.width[2], 0); boolean anim4 = performLayoutAnimation(3, 0, 0); mAnimationStart = anim1 || anim2 || anim3 || anim4; } setPositionChild(first, xPos[0], yPos[0]); setPositionChild(second, xPos[1], yPos[1]); setPositionChild(third, xPos[2], yPos[2]); setPositionChild(fourth, xPos[3], yPos[3]); } setExtent(width, height); } boolean performLayoutAnimation(int fieldIndex, int x, int y) { boolean result = false; if (xPos[fieldIndex] > x) { xPos[fieldIndex] -= 2; result = true; } else if (xPos[fieldIndex] < x) { xPos[fieldIndex] += 2; result = true; } if (yPos[fieldIndex] > y) { yPos[fieldIndex] -= 1; result = true; } else if (yPos[fieldIndex] < y) { yPos[fieldIndex] += 1; result = true; } return result; } } 

Класс BitmapButtonField, который я использовал:

 class BitmapButtonField extends ButtonField { Bitmap mNormal; Bitmap mFocused; int mWidth; int mHeight; public BitmapButtonField(Bitmap normal, Bitmap focused) { super(CONSUME_CLICK); mNormal = normal; mFocused = focused; mWidth = mNormal.getWidth(); mHeight = mNormal.getHeight(); setMargin(0, 0, 0, 0); setPadding(0, 0, 0, 0); setBorder(BorderFactory.createSimpleBorder(new XYEdges(0, 0, 0, 0))); setBorder(VISUAL_STATE_ACTIVE, BorderFactory .createSimpleBorder(new XYEdges(0, 0, 0, 0))); } protected void paint(Graphics graphics) { Bitmap bitmap = null; switch (getVisualState()) { case VISUAL_STATE_NORMAL: bitmap = mNormal; break; case VISUAL_STATE_FOCUS: bitmap = mFocused; break; case VISUAL_STATE_ACTIVE: bitmap = mFocused; break; default: bitmap = mNormal; } graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitmap, 0, 0); } public int getPreferredWidth() { return mWidth; } public int getPreferredHeight() { return mHeight; } protected void layout(int width, int height) { setExtent(mWidth, mHeight); } protected void applyTheme(Graphics arg0, boolean arg1) { } } 
  • Безопасно ли создавать виджеты Swing / AWT NOT на тему Dispatch Event?
  • Как лучше всего настроить Swing GUI?
  • Как я могу улучшить внешний вид приложения для Android?
  • Создание пользовательской кнопки в Java с помощью JButton
  • Как создать графический интерфейс пользователя на C ++?
  • Android 4.2.1 неправильный кернинг символов (интервал)
  • GUI не работает после перезаписи в MVC
  • Эффект JavaFX на фоне
  • Repeater, ListView, DataList, DataGrid, GridView ... Что выбрать?
  • Использование нескольких JFrames: хорошая или плохая практика?
  • Рамки графического интерфейса Java. Что выбрать? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?
  • Давайте будем гением компьютера.