すべてのフレームが同じ高さで幅が異なるアニメーションを再生しています。大丈夫ですが、パフォーマンスを向上させるために、マトリックスを使用していくつかの変換を適用したいと思います。
最初のフレーム:
- ミラーマトリックスを適用するかどうかをランダムに決定します
- 高さを測定して、縮小マトリックスを適用する必要があるかどうかを確認します。
以下は、ほとんど動作するコードです。どういうわけか一貫性がなく、フレームが中央に配置されることもあれば、オフセットされることもあります。私はマトリックスの経験がないので、より多くの知識を持っている人が変換手順を確認/修正/改善できるとありがたいです. この行列は、canvas 描画メソッドに提供されます。
さらに、次のことを制御したいと思います。
- 縮小が必要な場合は、正確な高さに縮小します(高さは私の唯一の向きの値です)
- すべてのフレームが下中央で描画されるようにマトリックスを使用できますか?
編集: 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;