Как поменять картинки на onTouch? - PullRequest
0 голосов
/ 12 марта 2012

Я новичок в Android и в настоящее время я работаю над простым приложением. У меня есть 7 картинок, и я хочу изменить одну за другой, когда пользователь касается экрана. Вот мой код, мое приложение вылетает при втором касании на экране. Если кто-нибудь может помочь, я был бы благодарен.

public class Game extends Activity {
public TextView result;
public ImageView pirveli, meore, mesame, meotxe, mexute, meeqvse, meshvide;

int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);
    result = (TextView) findViewById(R.id.result);
    result.setText("Number of steps made: " + counter);

    pirveli = (ImageView) findViewById(R.drawable.pirveli);
    meore = (ImageView) findViewById(R.drawable.meore);
    mesame = (ImageView) findViewById(R.drawable.mesame);
    meotxe = (ImageView) findViewById(R.drawable.meotxe);
    mexute = (ImageView) findViewById(R.drawable.mexute);
    meeqvse = (ImageView) findViewById(R.drawable.meeqvse);
    meshvide= (ImageView) findViewById(R.drawable.meshvide);
}

public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    if(event.getAction()==0){

    result.setText("Number of steps made: " + counter);
    counter++; 

    pirveli.setImageResource(R.drawable.meore);
    }
    return false;
}

И еще один вопрос: когда я впервые касаюсь экрана, int counter не увеличивается. как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Если предположить, что R.drawable.meore, R.drawable.mesame и т. Д. Являются доступными для извлечения ресурсами в папке drawable, это должно сработать.

public class Game extends Activity {

TextView result;
int[] drawableIds = {R.drawable.meore, R.drawablemeSame, R.drawable.meotxe, R.drawable.mexute, R.drawable.meeqvse, R.drawable.meshvide};   
int counter=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.game);
  result = (TextView) findViewById(R.id.result);
  result.setText("Number of steps made: " + counter);

  pirveli = (ImageView) findViewById(R.drawable.pirveli);
  pirveli.setOnTouchListener(this);
}

public boolean onTouchEvent(MotionEvent event) {
  if(event.getAction()==MotionEvent.ACTION_DOWN){
     result.setText("Number of steps made: " + counter);
     counter++;
     pirveli.setImageResource( drawableIds[ drawableIds.length % counter ] );
  }
  return false;
}

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

0 голосов
/ 12 марта 2012

Прежде всего вы должны использовать константы MotionEvent, так как они могут измениться в будущих версиях API, а также вам необходимо вернуть true после обработки события касания.

Я также предлагаю вам добавить нулевые проверки для хорошей меры.

public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        if (result != null);
            result.setText("Number of steps made: " + counter);
        counter++; 

        if (pirveli != null)
            pirveli.setImageResource(R.drawable.meore);
        return true;
    }
    return false;
}

Трассировка стека будет очень полезна, если ни одна из этих проблем не является вашей.

...