fiz uma tela em canvas para meu aplicativo, testei no palm e funcina perfeitamente, mas instalei esse aplicativo em outro aparelho, um nokia 5800, mas nesse aparelho essa tela não funciona corretamente, pois ao clicar em um botão da classe dessa tela ela deve ser redesenhada, mas isso só acontece quando eu saio dela e abro novamente.
Alguem sabe por que isso acontece? Alguem sabe corrigir?
obs. lembrando que num aparelho ta normal e só acontece isso no outro
public void onButtomTouch(ButtomImage buttom){
if (buttom == img01)
repaint();
}
[code] protected void paint(Graphics g){
// Re-define a cor que será usada no label dos botões
int corPreto = 0x00000000;
// Re-define a fonte que será usada no label dos botões
Font fonteBotao = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
// Re-define a imagem que será usada nos botões
Image image01 = getImg01();
// Re-define botões e posicionamento
img01 = new ButtomImage(212, 18, image01, this, "", corPreto, fonteBotao);
// Pinta a tela
g.setColor(0x00ffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x00000000);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
img01.paint(g);
}[/code]
[quote=j0nny]Uma dica, não instancie objetos dentro do paint.
Outra, vc está repintando tbm a tela onde está seu botão?
Isso já ocorreu cmg tbm.[/quote]
sim, como eu disse a tela só é mostrada quando eu saio e entro na classe novamente, mas a ideia é recarregar dentro da propria classe
isso ja funciona no palm da maneira que postei, só nesse outro aparelho que não
[quote=vfmartins][quote=j0nny]Uma dica, não instancie objetos dentro do paint.
Outra, vc está repintando tbm a tela onde está seu botão?
Isso já ocorreu cmg tbm.[/quote]
sim, como eu disse a tela só é mostrada quando eu saio e entro na classe novamente, mas a ideia é recarregar dentro da propria classe
isso ja funciona no palm da maneira que postei, só nesse outro aparelho que não
o que vc fez para resolver na sua situação?[/quote]
Ok, tente chamar o repaint do seu botão quando vc da um repaint na sua tela, deve funcionar.
public void onButtomTouch(ButtomImage buttom){
if (buttom == img01) {
button.repaint();
repaint();
}
}
Não sei se é a melhor solução, mas assim que resolvi meu problema momentaneamente :oops: [/quote]
aqui deu erro no buttom.repaint(); deu cannot find symbol
viu, uma coisa que eu reparei testando no aparelho é que ele executa sim ao tocar, mas ele só pinta a tela quando eu executo alguma outra ação qualquer (mesmo que seja algo do aparelho que nem faça parte do aplicativo)
será que é algum bug do aparelho que pinta a tela com atraso ou será que estou fazendo algo errado?
public void onButtomTouch(ButtomImage buttom){
if (buttom == img01) {
button.repaint();
repaint();
}
}
Não sei se é a melhor solução, mas assim que resolvi meu problema momentaneamente :oops: [/quote]
aqui deu erro no buttom.repaint(); deu cannot find symbol
viu, uma coisa que eu reparei testando no aparelho é que ele executa sim ao tocar, mas ele só pinta a tela quando eu executo alguma outra ação qualquer (mesmo que seja algo do aparelho que nem faça parte do aplicativo)
será que é algum bug do aparelho que pinta a tela com atraso ou será que estou fazendo algo errado?
[/quote]
Então melhor, crie um método repinta() no seu botão que chama o repaint() e teste. Claro que é meio POG :oops: , mas teste para ver se é isso msm.
eu tentei isso, mas nem assim deu certo
eu verifiquei que isso também acontece quando uma tela canvas de uma classe chama uma outra tela canvas de outra classe
o que pode ser ein?
É estranho, pq aqui faço o seguinte.
No meu form canvas, no pointerPressed(), verifico se a área de algum dos comopnentes foi tocada, se foi, então repasso o pointerPressed() para o componente, então ele se encarrega de fazer a ação que quiser e dar um repaint() nele.
No caso seria mais ou menos assim.
//no form
protected void pointerPressed(int x, int y) {
//faço um laço percorrendo os componentes e chamando o isTouched() que nm vc
if(componente.isTouched(int x, int y) {
componente.pointerPressed(int x, int y);
repaint();
}
}
//no componente
protected void pointerPressed(int x, int y) {
//faço a ação desejada conforme as coordenadas e repinto
repaint();
}
o teu código tbm funciona, mas não da maneira que eu preciso
das duas formas a tela só é pintada após alguma outra ação no aparelho
e agora?? alguém sabe o que eu faço para pintar a tela no ato?
Cara, nem tinha me tocado, mas observe, cada vez que vc chamar o repaint(), um novo botao será criado, é isso mesmo que vc quer?
Creio que assim não pode funcionar mesmo.
[quote=j0nny]Cara, nem tinha me tocado, mas observe, cada vez que vc chamar o repaint(), um novo botao será criado, é isso mesmo que vc quer?
Creio que assim não pode funcionar mesmo.[/quote]
então, a intenção é que ao clicar nesse botão o usuário tenha a sensação que ele mudou de cor, mas na verdade pinta novamente a tela e no lugar daquela imagem vai uma de outra cor (eu percebi que ele faz isso, mas com atraso, pois quando eu clico a primeira vez visualmente não faz nada, mas quando eu clico a segunda eu vejo ele executar a primeira ação, entende?)
Cara, então use algo assim.
Tenha uma variavel de controle no seu botao, por exemplo, boolean estaClicado = false.
E quando ele for tocado, faça o seguinte, estaClicado = true.
No paint() do botao, faça
if(estaClicado) {
//pinta na cor e no jeito que vc quiser
}
else {
//pinte na forma comum
}
//ou ainda
int corBotao;
if(estaClicado)
corBotao = 0x00ffffff;
else
corBotao = 0x00000000;
//pinte seu botao com a cor que está em corBotao
Ah, e não esqueça de instanciar seu botao fora do paint() :thumbup:
[quote=j0nny]Tirou a instanciação de dentro do paint()?
Ele executa normal no emmulador?
Qq coisa, posta aí como vc fez.[/quote]
tirei, testei todas as formas, mas sempre da esse atraso
no emulador funciona, mas pelo command, não consigo testar o touch
mas no palm funciona de todas as maneiras
segue meu código (que funciona no palm e no nokia tfunciona com atraso)
protected void pointerPressed(int x, int y){
if (img01.isTouched(x, y))
repaint();
}
protected void paint(Graphics g){
repinta();
}
[code]public void repinta(){
// Re-define a cor que será usada no label dos botões
int corPreto = 0x00000000;
// Re-define a fonte que será usada no label dos botões
Font fonteBotao = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
// Re-define a imagem que será usada nos botões
Image image01 = getImg01();
// Re-define botões e posicionamento
img01 = new ButtomImage(212, 18, image01, this, "", corPreto, fonteBotao);
// Pinta a tela
g.setColor(0x00ffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x00000000);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
img01.paint(g);