2013-01-22 3 views
0

내 게임은 플레이어의 건강 상태를 보여주기 위해 모든 클래스의 TextView 배경을 업데이트해야합니다. 그러나 지금 생각할 수있는 유일한 방법은 다음과 같습니다.안드로이드, 다른 클래스의 메소드를 실행하십시오.

int Health = 100; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_act1); 

    if (Health == 100){ 
     HealthDisplay.setBackgroundResource(R.drawable.health100); 
    } else if (Health == 99){ 
     HealthDisplay.setBackgroundResource(R.drawable.health99); 
    } else if (Health == 98){ 
     HealthDisplay.setBackgroundResource(R.drawable.health98); 
    } else if (Health == 99){ 
     HealthDisplay.setBackgroundResource(R.drawable.health98); 
    } else if (Health == 99){ 
     HealthDisplay.setBackgroundResource(R.drawable.health98); 
    } else if (Health == 99){ 
     HealthDisplay.setBackgroundResource(R.drawable.health98); 
    } 

etc. 
} 

특히 두 개의 다른 통계에 대해서도 비슷한 작업을 수행해야하므로이 작업을 더 쉽고 빠르게 수행 할 수 있어야합니다.

나는 별도의 클래스를 처리하는 것에 대해 생각해 보았고 onCreate에 줄을 사용하여 배경 이미지를 업데이트 한 다음이 클래스로 돌아가도록 지시했다.

이와 비슷한 방법이 있을까요?

int Health = 100; 

HealthDisplay.setBackgroundResource(R.drawable.health(Health)); 

답변

0

나는 (전체 건강을 위해) 하나의 이미지를 가지고 있으며, 매번 자르고 그것을 건강 수준에 따라 보여주는 것이 좋습니다. 예를 들어 :

private ImageView healthLevel; 
private ClipDrawable clipDrawable; 
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      healthLevel = (ImageView) findViewById(R.id.health); //there a corresponding ImageView in the layout 
      BitmapDrawable bitmapDrawable = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.full_health)); 
      //vertical bar cropped from top 
      clipDrawable = new ClipDrawable(bitmapDrawable, Gravity.BOTTOM, ClipDrawable.VERTICAL); 
      healthLevel.setImageDrawable(clipDrawable); 
    } 

와는 다른 스레드에서 당신이 부를 것이다 :

int health = 54; 
clipDrawable.setLevel(health); 
clipDrawable.invalidateSelf(); 
0

죄송합니다 이해가 안 "내 게임은 플레이어의 상태를 보여에서 onCreate 모든 클래스의 텍스트 뷰의 배경을 업데이트해야합니다." 런타임에 배경을 업데이트하려면 onCreate에서 한 번만 호출되므로 (활동이 생성 될 때) 수행하지 마십시오.

TextView에서 setBackgroundResource를 호출하여이 배경을 업데이트하는 메소드를 만들면됩니다.

+0

라디오 버튼 선택이있을 때마다 클래스를 변경하는 텍스트 기반 게임 만 있으므로 작업이 수행 될 때마다 클래스가 변경되므로 oncreate에서 업데이트하는 것이 좋습니다. 메신저도 방법을 만드는 방법에 대한 도움을 요청합니다. 모든 클래스에 거대한 코드 조각이없는 것이 좋습니다. –

+0

onCreate는 활동입니다. 버튼을 누를 때마다 액티비티가 생성된다고 말하는 것입니까? – olma

+0

네 게임은 너무 간단하고 제한적이기 때문에 (클래스 당 최대 3 가지 선택이 가능하므로 1. 계단을 올라간다 2. 내려 가서 울다) 코드가 액션 당 다른 클래스로 분리되어 있다면 최신 정보를 유지하기가 더 쉽다. 취한 –

0

ThomasKa의 대답은 좋은 것입니다. 하나의 리소스를 자르기 만하면 많은 시간을 절약 할 수 있습니다. 그러나 원할 경우 은 100 개의 개별 드로어 블을 사용할 수 있습니다.

드로어 블의 이름을 적절하게 (번호 접미사로) 이름을 붙인 다음 원하는 이름으로 붙잡고 자하십시오.

Resources res = getResources(); 
int resId = res.getIdentifier("health" + Health, "drawable", getPackageName()); 
HealthDisplay.setBackgroundResource(resId); 

예는 당신의 드로어 블이 당신의 예에서와 같이, health100, health99 등의 이름을 지정하는 가정 : 당신은 그것에 대해 Resources.getIdentifier(), 같은 것을 사용할 수 있습니다.

관련 문제