2012-03-12 2 views
0

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

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

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

+0

Пожалуйста, добавьте StackTrace к вашему сообщению. – PKeidel

ответ

0

Предполагая, что 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

Я хотел бы указать, что лучший способ сделать это - загрузить и сохранить растровые изображения через BitmapFactory (при условии, что они маленькие). Таким образом, они не должны каждый раз декодировать. Это больше удешевляет процессор, но занимает гораздо меньше памяти. – DeeV

0

Прежде всего, вы должны использовать константы 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; 
} 

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

+0

@bbedard, СПАСИБО! – gtboy

Смежные вопросы