ホームページ >ウェブフロントエンド >htmlチュートリアル >カスタム アニメーション、3D アニメーション回転_html/css_WEB-ITnose

カスタム アニメーション、3D アニメーション回転_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-21 09:13:211253ブラウズ

/**

* カスタム アニメーション。カメラを使用して 3D 効果を実現します。 image = (ImageView)

* findViewById(R.id.image) * BitmapFactory.decodeResource(getResources(), R.drawable) .main_back_pic) ;

* image.setImageBitmap(bitmap); image.startAnimation(new

* MyAnimation(bitmap.getWidth()/2, bitmap.getHeight()/2, 3500));

**/

public class MyAnimation extendsAnimation {


private int width;

private int height;

private int period;// 期間

private Camera カメラ = new Camera();


public MyAnimation(int width, int height, int period) {

this.height = height;

this.width = width;

this.duration = period;

}


@Override

public voidInitialize(int width, int height, intparentWidth,

intparentHeight) {

setDuration(duration);//アニメーションの実行時間を設定します

setFillAfter(true) / / アニメーションが終了すると、アニメーションはアニメーションの最後のフレームに留まります。 setFillBefore(true): アニメーションが終了すると、最初のフレームに留まります

// アニメーションは均一モーションに設定され、モーション状態が設定されますXML ファイルで設定しても効果はなく、Java コードで設定する必要があります

setInterpolator(new LinearInterpolator());

super.initialize(width, height,parentWidth,parentHeight);

}


@Override

protected void applyTransformation(float interpolatedTime,

Transformation trans) {

/**

* このメソッドの 2 つのパラメーター (最初の interpolatedTime) は、時間がどれだけ長くても、パラメーター値は 0 から 1 までです

* 0 はアニメーションの開始を表し、1 はアニメーションの開始を表します。アニメーションの終了を表します。Transformation は、アニメーションを変更するために Camera によって提供されるメソッドです。 getMatrix (Matrix

* matrix) は、Camera によって行われた変更を行列に適用します。rotateX (float deg) は、ターゲット コンポーネントを X 軸に沿って回転します

*rotateY (float deg) Y 軸に沿ってターゲット コンポーネントを回転します totateZ (float deg) Z 軸に沿ってコンポーネントを回転します

* Translation (float x, float y, float z) ターゲット コンポーネントを 3 次元空間で変位させます

* applyToCanvas (キャンバス キャンバス) は、カメラによる変更を Canvas に適用します

**/

super.applyTransformation(interpolatedTime, trans);

Camera.save();

// 3 次元ビューのターゲット コンポーネントを切り替えます

// 初めて呼び出されたとき、interpolatedTime の値は 0 で、これはビューを 10 ピクセル移動するのと同じですが、その後はその値がどんどん小さくなっていきます。一定期間が経過すると、再び方向が変わります

Camera.translate(0.0f, 0.0f , (10 - 10 * interpolatedTime));

// Camera.rotateX(360 * interpolatedTime);

Camera.rotateY(360 * interpolatedTime);

// Camera.rotateZ(360 * interpolatedTime);

Matrix 行列 = trans.getMatrix();

Camera.getMatrix(matrix);

// preTranslate は setScale 前の翻訳を指し、postTranslate は指しますto translation after setScale

// パラメーターは移動距離であり、移動先の座標ではないことに注意してください!

// ズームの中心は (0,0) なので、インターフェイスの中心を揃えるためにwith (0,0), preTranslate(-centerX,

// - centerY),

// setScale が完了したら、postTranslate(centerX,

// centerY) を呼び出し、画像を元に戻します。表示されるアニメーション効果は、アクティビティ インターフェイスの画像が中心から常にスケーリングしていることです

// centerX と centerY はインターフェイスの中心の座標です

matrix.preTranslate(-width, -height);

matrix.postTranslate(幅、高さ);


Camera.restore();

}

}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。