Android 如何在onTouch上更改图片?

Android 如何在onTouch上更改图片?,android,drawable,touch-event,ontouchlistener,Android,Drawable,Touch Event,Ontouchlistener,我是android的初学者,目前正在开发简单的应用程序。我有7张图片,当用户触摸屏幕时,我想逐一更改。这是我的代码,我的应用程序在第二次触摸屏幕时崩溃。如果有人能帮忙,我会很感激的 public class Game extends Activity { public TextView result; public ImageView pirveli, meore, mesame, meotxe, mexute, meeqvse, meshvide; int counter=0; @Overr

我是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计数器并没有增加。如何修复它?

首先,您应该使用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;
}

如果这些都不是您的问题,堆栈跟踪将非常有用。

假设
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,并在用户每次触摸它时更改
图像视图。

请将StackTrace添加到您的帖子中。我想指出,更好的方法是通过BitmapFactory加载和存储位图(假设位图很小)。这样他们就不必每次都解码了。这对CPU来说更费力,但占用的内存要少得多。