2012-07-28 4 views

답변

1

이렇게하면됩니다.

protected void onDraw(Canvas canvas) 
{ 
    canvas.drawColor(Color.TRANSPARENT); 

    canvas.scale(0.5f, 0.5f); // scale gif to its half size 

    super.onDraw(canvas); 

    /* movie.setTime . . . */ 

    movie.draw(canvas, ...); 

    this.invalidate(); 

} 
2

당신은 당신이뿐만 아니라보기의 getWidth()와 getHeight() 메소드를 사용한다 다른 레이아웃 내에서 확장 할 수 및 재사용 전용보기를 만들려고 노력합니다.

보기의 전용 크기를 변경할 때이 문제가 발생했습니다. canvas.getWidth()는 전체 화면의 너비이며보기 너비가 아니므로 onDraw 메서드를 다음과 같이 수정했습니다. 그러나 다른 방법을 사용하여, 문이 영화가 내 경우에는,보기보다 큰 있는지 확인하는 경우

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    super.onDraw(canvas); 

    long now = android.os.SystemClock.uptimeMillis(); 

    Paint p = new Paint(); 
    p.setAntiAlias(true); 

    if (cur == 0) cur = now; 

    if(movie != null) 
    { 
     float scale = 1f; 
     if(movie.height() > getHeight() || movie.width() > getWidth()) 
      scale = (1f/Math.min(canvas.getHeight()/movie.height(), canvas.getWidth()/movie.width())) + 0.25f; 
     else  
      scale = Math.min(canvas.getHeight()/movie.height(), canvas.getWidth()/movie.width()); 

     canvas.scale(scale, scale); 
     canvas.translate(((float)getWidth()/scale - (float)movie.width())/2f, 
       ((float)getHeight()/scale - (float)movie.height())/2f); 

     int relTime = (int)((now - cur) % movie.duration()); 
     movie.setTime(relTime); 
     movie.draw(canvas, 0, 0); 


     invalidate(); 
    } 
} 

을 주목 getWidth(), getHeight()는 내 의견 높이 160했지만 내 GIF는 260이었다 항상 GIF를 그리기에는 너무 큽니다.이 변경 사항으로 테스트 할 수 있었고 내 View가 1280 X 900이고 이미지가 커지고 내 뷰가 1000 X 160이고 크기가 축소 된 경우 모두에서 작동하는 것을 확인할 수있었습니다.

행운을 빈다

, 그리고이 재미 - 즉, D

크리스는

+0

난 단지 드로잉 코드에서 '다른'문을 사용하는 것이 더 나은 결과를 산출 것으로 나타났다. 그것은 모든 장치로 확장되었습니다. 내 프로젝트에서 'if'문을 사용하지 않았다. – EricRobertBrewer

관련 문제