2014-03-26 4 views
0

LinearLayout에서 사용자 정의보기를 사용하려고하지만 onDraw()가 호출되지 않습니다. 몇 가지 게시물을 읽었으나 서비스에서 뷰를 업데이트하는 방법을 설명하는 솔루션을 찾지 못했습니다.사용자 정의보기에서 onDraw가 호출되지 않았습니다.

내 서비스는 첨부 된 시각화기를 사용하여 미디어 플레이어를 제어합니다. Androids visualizer는 invalidate()를 호출하고 onDraw()가 호출 될 것을 기대하는 사용자 정의보기로 바이트 배열로 업데이트를보고하지만 결코 발생하지 않습니다.

MediaPlayer를 서비스 :

LayoutInflater layoutInflater = (LayoutInflater) 
       getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = layoutInflater.inflate(R.layout.player, null); 
this.visualizerView = (VisualizerView) layout.findViewById(R.id.visualizerView); 

            ... 

this.visualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() { 
public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
                 int samplingRate) { 
         visualizerView.updateVisualizer(bytes); 
} 

public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { 
        } 
    }, Visualizer.getMaxCaptureRate()/2, true, false); 

사용자 정의보기 클래스 :

public VisualizerView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public void setValues(float[] values){ 

    } 

    private void init() { 
     this.setWillNotDraw(false); 
     mBytes = null; 
    } 

    public void updateVisualizer(byte[] bytes) { 
     mBytes = bytes; 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     ... 
    } 
나는 미디어 플레이어 서비스를 시작하고 내 사용자 지정 시각 뷰의 인스턴스를 얻기 위해 조각을 사용하여 업데이트 이런 식으로하고있어

+1

왜 레이아웃을 서비스에 적용합니까 ??? 그것이 속한 조각에서 해보십시오. – kiruwka

답변

1

Services은 시각화를 지원하지 않습니다. 장기 실행 백그라운드 작업에 사용됩니다.

애플리케이션에 액티비티 구성 요소를 연결 한 다음 setContentView를 사용하여 뷰/레이아웃을 첨부해야합니다. 그런 다음 서비스와 활동 간의 통신에 인 텐트를 사용할 수 있습니다.

관련 문제