Bom tarde,
Estou brincando de movimentar imagem na tela e tal, mas quero fazer com que por exemplo quando a imagem que estou movimentando chegue em determinado ponto x,y o meu textview que tem a pontuação altere para exibir a pontuação total até o momento, porém SEMPRE que chego no tal ponto x,y e a textview deveria alterar dá um erro na aplicação (“Sorry! the application Movimentação de Imagens (process br.com.android) has stopped unexpectedley. Please try again”) e ela encerra.
se alguém puder me ajudar fico grato.
Segue o meu código e o xml.
package br.com.android;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
public class MovImg extends View {
TextView tvPontuacao;
private Drawable imgBola;
int x, y;
int pontuacao = 0;
int pulo = 10;
int largura, altura;
public MovImg(Context context, AttributeSet attrs) {
super(context, attrs);
//Imagem de fundo
setBackgroundResource(R.drawable.img_quadra);
//Recupera a imagem
imgBola = context.getResources().getDrawable(R.drawable.bola_basket_32x32);
//Recupera a largura e a altura da imagem
largura = imgBola.getIntrinsicWidth();
altura = imgBola.getIntrinsicHeight();
//Configura a view para receber o foco e tratar eventos de teclado
setFocusable(true);
}
@Override
//chamado quando a tela é redimensionada ou iniciada
protected void onSizeChanged(int width, int height, int oldw, int oldh){
super.onSizeChanged(width, height, oldw, oldh);
//o width e height representam a largura e altura em pixels
x = width / 2 - (largura / 2);
y = height / 2 - (altura / 2);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
//define os limites/área para desenhar
imgBola.setBounds(x, y, x + largura, y + altura);
//desenha a imagem
imgBola.draw(canvas);
}
@Override
public boolean onKeyDown(int codigoTecla, KeyEvent evento){
boolean redesenhar = true;
switch(codigoTecla){
case KeyEvent.KEYCODE_DPAD_UP : y -= pulo; break;
case KeyEvent.KEYCODE_DPAD_DOWN : y += pulo; break;
case KeyEvent.KEYCODE_DPAD_LEFT : x -= pulo; break;
case KeyEvent.KEYCODE_DPAD_RIGHT : x += pulo; break;
default : redesenhar = false;
}
if((x >= 100 && x <= getWidth()) && (y >= 0 && y <=100)){
tvPontuacao = (TextView) findViewById(R.id.tvPontuacao);
pontuacao += 2;
tvPontuacao.setText("Pontuação: " + pontuacao);
x = getWidth() / 2 - (largura / 2);
y = getHeight() / 2 - (altura / 2);
}
if(x - (largura / 2) < 0){
x = (largura / 2) - pulo;
}
if(y - (altura / 2) < 0){
y = (altura / 2) - pulo;
}
if(x + (largura) > getWidth()){
x = (getWidth() - largura/2) - (pulo+4);
}
if(y + (altura) > getHeight()){
y = (getHeight() - altura/2) - (pulo+3);
}
if(redesenhar){
invalidate();
return true;
}
return super.onKeyDown(codigoTecla, evento);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom){
super.onLayout(changed, left, top, right, bottom);
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<br.com.android.MovImg
android:id="@+id/MovImg"
android:layout_width="wrap_content"
android:layout_height=“wrap_content”
/>
(para deixar claro estou seguindo os passos do livro de Android 2.2 porém com um pouco de modificações)