2015-01-17 8 views
0

내 요구 사항은 비트 맵 변경 사항을 클릭 할 때 별 5 개를 만드는 것입니다. "클릭 해제 됨"비트 맵이 기본값으로 다시 변경 될 때입니다. 별 1을 클릭하지 않으면 모든 별 4 개를 완료해야합니다. 클릭 할 수없는 경우, 별 2를 클릭 한 다음 별 3을 클릭 할 수 있어야하고 별 5 - 5 개를 모두 선택해야만 별 4-5를 클릭 할 수 없으며 (뒤로) 별 5를 클릭 할 수 있어야합니다 (별 5 및 4를 클릭 취소 한 경우). 다음 star3must 저는 오류 얻고 그것을) (AmountOfStarsSelected위한 방법을 도시 생성 코드 실행함으로써 상기 등별 모양을 클릭하면 등급 별이 숨겨집니다.

public class Starscreen extends MainScreen 
{ 
protected static BitmapField Star1 = null; 
protected static BitmapField Star2 = null; 
protected static BitmapField Star4 = null; 
protected static BitmapField Star5 = null; 
protected static final Bitmap StarClicked = null; 
protected static BitmapField Star3 = null; 
BitmapField bitmapField1; 
private Bitmap StarNotClicked; 
public Starscreen(Secondscreen secondscreen) 
{ 
    setTitle("Star Screen"); 
LabelField RateDeal = new LabelField("Rating: "); 
    Mainlayout.add(RateDeal); 
     HorizontalFieldManager StarManager=new HorizontalFieldManager 
     (USE_ALL_WIDTH); 
     final Bitmap StarNotClicked = Bitmap.getBitmapResource("Star3.png"); 
     final Bitmap StarClicked = Bitmap.getBitmapResource("Star4.png"); 

    Star1 = new BitmapField(StarNotClicked,BitmapField.FOCUSABLE){ 
     private Object StarClicked; 

     protected boolean navigationClick(int status, int time){ 
     fieldChangeNotify(1); 
     Star1.setBitmap((Bitmap) StarClicked); 
     Star2.setBitmap(StarNotClicked); 
     Star3.setBitmap(StarNotClicked); 
     Star4.setBitmap(StarNotClicked); 
     Star5.setBitmap(StarNotClicked); 
     AmountOfStarsSelected(1); 
     return true; 
     } 
     }; 
     Star2 = new BitmapField(StarNotClicked,BitmapField.FOCUSABLE){ 
     private Object StarClicked; 

     protected boolean navigationClick(int status, int time){ 
     fieldChangeNotify(1); 
     Star1.setBitmap((Bitmap) StarClicked); 
     Star2.setBitmap((Bitmap) StarClicked); 
     Star3.setBitmap(StarNotClicked); 
     Star4.setBitmap(StarNotClicked); 
     Star5.setBitmap(StarNotClicked); 
     AmountOfStarsSelected(2); 
     return true; 
     } 
     }; 
     Star3 = new BitmapField(StarNotClicked,BitmapField.FOCUSABLE){ 
     // private Object StarClicked; 

     protected boolean navigationClick(int status, int time){ 
     fieldChangeNotify(1); 

     Star1.setBitmap((Bitmap) StarClicked); 
     Star2.setBitmap((Bitmap) StarClicked); 
     Star3.setBitmap((Bitmap) StarClicked); 
     Star4.setBitmap(StarNotClicked); 
     Star5.setBitmap(StarNotClicked); 
     AmountOfStarsSelected(3); 
     return true; 
     } 
     }; 
     Star4 = new BitmapField(StarNotClicked,BitmapField.FOCUSABLE){ 
     protected boolean navigationClick(int status, int time){ 
     fieldChangeNotify(1); 

     Star1.setBitmap(StarClicked); 
     Star2.setBitmap(StarClicked); 
     Star3.setBitmap(StarClicked); 
     Star4.setBitmap(StarClicked); 
     Star5.setBitmap(StarNotClicked); 
     AmountOfStarsSelected(4); 
     return true; 
     } 
     }; 
     Star5 = new BitmapField(StarNotClicked,BitmapField.FOCUSABLE){ 
     protected boolean navigationClick(int status, int time){ 
     fieldChangeNotify(1); 

     Star1.setBitmap(StarClicked); 
     Star2.setBitmap(StarClicked); 
     Star3.setBitmap(StarClicked); 
     Star4.setBitmap(StarClicked); 
     Star5.setBitmap(StarClicked); 
     AmountOfStarsSelected(5); 
     return true; 
     } 
     }; 
     StarManager.add(Star1); 
     StarManager.add(Star2); 
     StarManager.add(Star3); 
     StarManager.add(Star4); 
     StarManager.add(Star5); 
     Mainlayout.add(StarManager); 
     add(Mainlayout); 
} 
    } 

2-1 클릭 할 안 별 클릭 될; 하지만 AmountOfStarsSelected(); 내에서 어떤 조건을 사용해야하는지 알지 못합니다. 제발 도와주세요. 나는 검은 딸기를 처음 사용한다.

답변

0

나는 별도의 클래스를 만들고, HorizontalFieldManager에서 확장한다고 말하고 싶다. 해당 클래스에서 5 개의 버튼을 만들어 레이아웃하고, 로컬 상태 변수 int level을 포함하게하십시오. 이 클래스에 public setLevel(int level)getLevel() 메서드를 만듭니다. 여기서 레벨은 현재 선택된 별을 나타냅니다. 다음, 당신이

Star1 = new BitmapField(StarNotClicked, BitmapField.FOCUSABLE){ 
     protected boolean navigationClick(int status, int time) 
     { 
      setLevel(0); // If these fields are the only thing in your horizontal field you can get away with using setLevel(getIndex()); 
      return true; 
     } 
}; 

가 당신의 생성자에서 -1로 수준을 설정해야 기억이 setLevel 메소드를 호출해야 당신의 별 각에서

public void setLevel(int level) 
{ 
    if(Math.abs(this.level - level) != 1) 
    { 
     return; // this.level refers to your local state. return because there is no change, or the user didn't click 1 up or down. 
    } 

    if(level == 0) 
    { 
      Star1.setBitmap(StarClicked); 
    } 
    else 
    { 
      Star1.setBitmap(StarNotClicked); 
    } 

    if(level == 1) 
    { 
      Star2.setBitmap(StarClicked); 
    } 
    else 
    { 
      Star2.setBitmap(StarNotClicked); 
    } 

    if(level == 2) 
    { 
      Star3.setBitmap(StarClicked); 
    } 
    else 
    { 
      Star3.setBitmap(StarNotClicked); 
    } 

    if(level == 3) 
    { 
      Star4.setBitmap(StarClicked); 
    } 
    else 
    { 
      Star4.setBitmap(StarNotClicked); 
    } 

    if(level == 4) 
    { 
      Star5.setBitmap(StarClicked); 
    } 
    else 
    { 
      Star5.setBitmap(StarNotClicked); 
    } 

    this.level = level; 
} 

: setLevel에서

다음 코드를 넣어 setLevel (0)을 호출하면 기본적으로 첫 번째 별을 선택할 수 있습니다.