Вопрос

Пожалуйста, помогите мне, как установить фоновое изображение для экрана и как сделать анимацию в любом поле или в тексте?

Спасибо....

Это было полезно?

Решение

Изображение на заднем плане

В классе Screen есть защищенная пустота PaintBackground (Графика) метод.
По какой-то причине мы не можем использовать его напрямую для рисования фонового изображения на экране.Подвох:Метод PaintBackground является производным от класса Field, и мы можем использовать его в UpperFieldManager в качестве примера:

class BgScreen extends MainScreen implements FieldChangeListener {
 ButtonField mButton;
 public BgScreen(Bitmap background) {
  super();
  BGVerticalFieldManager manager = 
   new BGVerticalFieldManager(background);
  add(manager);
  mButton = new ButtonField("Button", ButtonField.CONSUME_CLICK);
  mButton.setChangeListener(this);
  manager.add(mButton);
 }

 public void fieldChanged(Field field, int context) {
  if (mButton == field)
   Dialog.inform("You pressed button");
 }
}

class BGVerticalFieldManager extends VerticalFieldManager {
 Bitmap mBgBitmap = null;
 int mBgWidth = -1;
 int mBgHeight = -1;
 int mBgX = -1;
 int mBgY = -1;

 public BGVerticalFieldManager(Bitmap background) {
  super(USE_ALL_WIDTH | USE_ALL_HEIGHT);
  mBgBitmap = background;
  mBgWidth = mBgBitmap.getWidth();
  mBgHeight = mBgBitmap.getHeight();
  mBgX = (Display.getWidth() - mBgWidth) >> 1;
  mBgY = (Display.getHeight() - mBgHeight) >> 1;

 }

 protected void paintBackground(Graphics graphics) {
  paintBackgroundBitmap(graphics);
  super.paintBackground(graphics);
 }

 private void paintBackgroundBitmap(Graphics graphics) {
  if (null != mBgBitmap) {
   graphics.drawBitmap(
    mBgX, mBgY, mBgWidth, mBgHeight, mBgBitmap, 0, 0);
  }
 }
}

GIF-анимация

Чтобы использовать анимацию GIF, переопределите защищенная краска пустоты (Графика) метод и использование рисоватьизображение увеличенного индекса кадра.Использовать Timer.scheduleAtFixedRate сделать поле недействительным:

class GIFVerticalFieldManager extends VerticalFieldManager {
    EncodedImage mGIFImage = null;
    int mGIFWidth = -1;
    int mGIFHeight = -1;
    int mGIFX = -1;
    int mGIFY = -1;
    int mGIFFrameCount = -1;
    int mGIFFrameIndex = -1;
    final int mGIFDelay = 30;

    public GIFVerticalFieldManager(EncodedImage gifAnimation) {
        super(USE_ALL_WIDTH | USE_ALL_HEIGHT);
        mGIFImage = gifAnimation;
        mGIFWidth = mGIFImage.getWidth();
        mGIFHeight = mGIFImage.getHeight();
        mGIFX = (Display.getWidth() - mGIFWidth) >> 1;
        mGIFY = (Display.getHeight() - mGIFHeight) >> 1;
        mGIFFrameCount = mGIFImage.getFrameCount();
        mGIFFrameIndex = 0;

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                invalidate();
            }
        }, mGIFDelay, mGIFDelay);
    }

    protected void paint(Graphics graphics) {
        paintGifAnimation(graphics);
        super.paint(graphics);
    }

    private void paintGifAnimation(Graphics graphics) {
        if (null != mGIFImage) {
            graphics.drawImage(
                mGIFX, mGIFY, mGIFWidth, mGIFHeight, 
            mGIFImage, mGIFFrameIndex, 0, 0);
            mGIFFrameIndex++;
            if (mGIFFrameIndex > mGIFFrameCount - 1)
                mGIFFrameIndex = 0;
        }
    }
}

РЕДАКТИРОВАТЬ: Отличная статья - Прямое рисование экрана

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top