2012-03-12 5 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; 
} 

그리고 하나 더 질문 : 처음으로 화면을 터치하면 int 카운터가 증가하지 않습니다. 내가 어떻게 고칠 수 있니?

+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를 통해 비트 맵을로드하고 저장하는 것입니다 (작다고 가정). 그렇게하면 매번 해독 할 필요가 없습니다. 이것은 CPU에 더 많은 세금을 부과하지만 메모리 사용량은 훨씬 적습니다. – DeeV

0

먼저 MotionEvent 상수는 향후 API 버전에서 변경 될 수 있으므로 사용해야하며 터치 이벤트가 처리 된 후에는 true를 반환해야합니다.

좋은 평가를 위해 null 체크를 추가하는 것이 좋습니다.

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

관련 문제