2016-07-13 3 views
0

나는 두 시간 동안 해결하려고 노력해 왔던 이상한 상황에 빠졌습니다. 그것은 내부의 Runnable이기 때문에 도달 할 수없는안드로이드 안쪽과 바깥 쪽 클래스 딜레마

} else { 
    ChangecolorFade.end(); 
    ChangecolorFade.cancel(); 
} 

여기

내가 else 문 내부의 ObjectAnimator을 중지하려고

public boolean AutoSlowColorChange(boolean SlowOn) { 

    if (SlowOn) { 

     final Random rand = new Random(); 
     final Handler handler = new Handler(); 

     Runnable r = new Runnable() { 

      public void run() { 
       int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 

       ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(), 
         Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor); 
       //slow change 
       ChangecolorFade.setDuration(2000); 
       ChangecolorFade.start(); 


       ChangecolorFade.setRepeatCount(ValueAnimator.INFINITE); 
       ChangecolorFade.setRepeatMode(ValueAnimator.REVERSE); 

       int value = rand.nextInt(10); 
       handler.postDelayed(this, 4000); 


      } 
     }; 

     handler.postDelayed(r, 1000); 
    } else { 
     ChangecolorFade.end(); 
     ChangecolorFade.cancel(); 
    } 

     return SlowOn; 

} 

내 주요 활동 자바 파일 안에 내 부울 방법입니다(), 메소드의 시작 부분에 ObjectAnimator를두면 Runnable과 else 문 모두에서 읽을 수있게됩니다.

public boolean AutoSlowColorChange(boolean SlowOn) { 
      int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
     ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(), 
       Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor); 
그것이 내가 무작위로 색상을 변경할 수 없습니다 나는 마지막이기 때문에 17,451,515,

내가 마지막으로 선언하면 최종

public boolean AutoSlowColorChange(boolean SlowOn) { 
      int Changecolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
     final ObjectAnimator ChangecolorFade = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(), 
       Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor); 

로 선언, 그것은 Runnable를 읽을 수됩니다() 및 그러나 다른 문이있을 것이다

또한 public 메인 메서드 내부에 Changecolor int를 배치하려고 시도했지만 행운이 없습니다. 그리고

아래에 다른 ObjectAnimator를 만들면
public boolean AutoSlowColorChange(boolean SlowOn) { 
ObjectAnimator ChangecolorFade2 = ObjectAnimator.ofObject(screen, "backgroundColor", new ArgbEvaluator(), 
     Color.argb(Changecolor, Changecolor, Changecolor, Changecolor), Changecolor); 

현재 애니메이션 실행을 중지 할 수 없습니다.

나는이 딜레마에 대한 아이디어가있는 사람이 있습니까? 고마워요 :)

답변

0

애니메이터를 선언해도 변경되지 않습니다. 올바른 결과를 얻을 수 있다면 ObjectAnimator의 setObjectValues ​​(Object ... values) 메소드를 사용하여 언제든지 색상 값을 업데이트 할 수 있습니다.

개체 애니메이터를 만든 후에 Changecolor를 변경할 수도 있습니다.

+1

대단히 감사합니다. :) – deathsonic