2012-07-28 18 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()if語句檢查,看看電影是超過視圖大小,在我的情況,我的看法高度爲160,但我的GIF爲260,但使用另一種方法是總是會畫出GIF太大的圖像,在這兩種情況下,我都能夠測試並看到它的工作情況,在這兩種情況下,我的視圖是1280 X 900,圖像放大了,我的視圖也是1000 X 160,並縮小了比例。

最好的運氣,和有樂趣:d

克里斯

+0

我發現,只有使用繪圖代碼的「其他」語句產生更好的結果 - 即。它擴展到所有設備。我在我的項目中混淆了'if'陳述。 – EricRobertBrewer 2016-04-08 23:42:06