2012-03-12 58 views
0

我是Android的初學者,目前我正在開發簡單的應用程序。我有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; 
} 

還有一個問題:當我第一次觸摸屏幕時,int計數器沒有增加。我該如何解決它?

+0

請將StackTrace添加到您的帖子中。 – PKeidel 2012-03-12 17:33:40

回答

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

這裏,將通過資源循環ID和每個用戶觸摸它的時候改變ImageView

+0

我想指出,更好的方法是通過BitmapFactory加載和存儲位圖(假設它們很小)。這樣他們不必每次都解碼。這對CPU來說更重要,但佔用的內存要少得多。 – DeeV 2012-03-12 19:04:42

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 2012-03-12 17:44:34