Pergunta

Por favor me ajude, como definir uma imagem de fundo para tela e como fazer animações em qualquer campo ou texto?

Obrigada....

Foi útil?

Solução

Imagem de fundo

Na aula de tela, há um Void Paintbackground protegido (gráficos gráficos) método.
Por alguma razão, não podemos usá -lo diretamente para pintar a imagem de fundo na tela. O método de captura: Paintbackground é derivado da classe de campo, e podemos usá -lo no verticalfieldManager no exemplo:

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

Animação GIF

Para usar a animação GIF, substitua Tintura vazia protegida (gráficos gráficos) método e uso drawimage do índice de quadros incrementado. Usar Timer.SCHEDULEATFIXEDRATE Para invalidar o campo:

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

EDITAR: Ótimo artigo - Desenho de tela direta

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top