2013-05-09 71 views
3

我在播放一些動畫,其中所有幀的高度相同,但寬度不同。一切順利,但我想要使用矩陣進行一些轉換以獲得更好的性能。矩陣鏡和比例尺

在第一幀:

  • 我隨機決定,如果我想申請鏡矩陣
  • 我測量身高,看看我是否需要申請規模縮小的矩陣。

下面是幾乎可以工作的代碼。不知何故,它不一致,幀有時居中,有時偏移。我沒有矩陣經驗,所以如果有更多知識的人可以確認/修正/改進轉換程序,我將不勝感激。這個矩陣被提供給畫布繪製方法。

此外,我想控制:

  • 如果縮小需要規模下降到確切的高度(身高是我唯一的方向值)
  • 可以矩陣來使用,使所有的幀將繪製底部中心?

編輯:我想我可以通過screenRect(目標矩形)控制精確縮小尺寸和底部中心位置?

基本精簡代碼:

RectF screenRect = new RectF(0, 0, ((float) displayWith), ((float) displayHeight)); 

Matrix mirror = null; 
if (isMirror) { 
    mirror = new Matrix(); 
    mirror.setScale(-1, 1); 
    mirror.postTranslate(p.x, 0); // position X back to original point 
} 

Matrix scale = null; 
if (isScaleDown) { // down-scale 
    scale = new Matrix(); 
    scale.setRectToRect(imageRect, screenRect, Matrix.ScaleToFit.CENTER);   
}    

// COMBINED TRANSFORMATION MATRIX 
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

Matrix trans = null; 
if (scale != null) trans = scale; 
if (mirror != null && trans == null) trans = mirror; 
if (mirror != null && trans != null) trans.setConcat(trans, mirror); 
return trans; 

回答

5

對於那些有興趣,我結束了設置 「規模」 和 「鏡子」 矩陣是這樣的:

  1. matrix.setScale(比例因子,比例因子); // value between 0..1
  2. matrix.postScale(-1,1,offsetX,offsetY); //垂直翻轉並向右偏移
  3. matrix.postTranslate(dx,dy); //最終矩陣位置 - 對我來說「底部中心對齊」