Help us understand the problem. What is going on with this article?

Android TextureView、SurfaceViewで簡単に放物線運動アニメーション 〜FPSAnimator〜

More than 3 years have passed since last update.

放物線運動アニメーションの作成

FPSAnimatorの基本的な使い方はこちらに記述しました。
今回の記事では放物線運動アニメーションに関して詳しく書きます。

Textをアニメーションさせる

  1. TextDrawerを作成
    インスタンス作成時に、Stringの文字列と、textSizeやtextColorが設定されたPaintをコンストラクタに設定。
    Paintにtypefaceを設定すれば、フォントを変えれますし、フォントアイコンを描画させることも可能です。

  2. DisplayObjectを生成し、FPSTextureView、FPSSurfaceView or ContainerにAddする。
    withの後にTweenアニメーションをするならばtween()、放物線運動のアニメーションを行うならparabolic()を記述。
    今回は放物線運動なのでparabolic()。

        // ParabolicMotionText
        Paint paint = new Paint();
        paint.setColor(ContextCompat.getColor(context, R.color.colorPrimary));
        paint.setTextSize(Util.convertDpToPixel(20, context));

        TextDrawer textDrawer = new TextDrawer("Text", paint);

        DisplayObject textDisplay = new DisplayObject();
        textDisplay.with(textDrawer)
                .parabolic()
                .transform(800, 800) // 初期位置指定
                .initialVelocityY(-40) // 初速度
                .end();

        mFPSTextureView.addChild(textDisplay);

Bitmapをアニメーションさせる

  1. BitmapDrawerを作成
    インスタンス作成時に、Bitmap をコンストラクタに設定。

  2. DisplayObjectを生成し、FPSTextureView、FPSSurfaceView or ContainerにAddする。
    withの後にTweenアニメーションをするならばtween()、放物線運動のアニメーションを行うならparabolic()を記述。
    今回は放物線運動なのでparabolic()。

        final DisplayObject bitmapDisplay = new DisplayObject();
        bitmapDisplay.with(new BitmapDrawer(mBitmap).dpSize(context))
                .parabolic()
                .transform(0, mFPSTextureView.getHeight())
                .reboundBottom(false)
                .accelerationX(8)
                .initialVelocityY(-30)
                .bottomHitCallback(new AnimCallBack() {
                    @Override
                    public void call() {
                        // canvasの底にヒットしたらremoveされる。
                        mFPSTextureView.removeChild(bitmapDisplay);
                    }
                })
                .end();

        mFPSTextureView.addChild(bitmapDisplay);

Parabolicのプロパティ

関数名 機能
transform(float x, float y) 初期位置の指定
frequency(int) FPSに対して、どれだけの頻度で表示場所を更新するかを入力できます。例えば、全体のFPSが30でfrequencyが2になっている場合、FPS15で放物線運動アニメーションが再生されます。
initialVelocityY(float velocityY) 初速度の指定。0以下であれば上に動き、0以上であれば下に加速する。
accelerationY(float accelerationY) Yの加速度の値。値の単位はpixel
accelerationX(float accelerationX) Xの加速度の値。値の単位はpixel
coefficientRestitutionY(float coefficientRestitutionY) 反発係数のY値。1以下であれば、跳ね返るたびに、跳ね返りが弱くなる。
coefficientRestitutionX(float coefficientRestitutionX) 反発係数のX値。1以下であれば、跳ね返るたびに、跳ね返りが弱くなる。
reboundBottom(boolean reboundBottom) 跳ね返るかどうかの指定。falseであれば跳ね返らない。
reboundLeft(boolean reboundLeft) 跳ね返るかどうかの指定。falseであれば跳ね返らない。
reboundRight(boolean reboundRight) 跳ね返るかどうかの指定。falseであれば跳ね返らない。
bottomBase(float bottomBase) Y座標での、跳ね返りの位置指定。
rightSide(float rightSide) X座標右側での、跳ね返りの位置指定。
leftSide(float leftSide) X座標左側での、跳ね返りの位置指定。
bottomHitCallback(AnimCallBack animCallBack) 底にきた際にdispatchするcallbackの指定
leftHitCallback(AnimCallBack animCallBack) 左側の跳ね返りにきた際にdispatchするcallbackの指定
rightHitCallback(AnimCallBack animCallBack) 右側の跳ね返りにきた際にdispatchするcallbackの指定

ぜひ、libraryにgithubのStarをお願いします。
FPSAnimator

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした