package com.daasuu.FPSAnimator; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Paint; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import com.daasuu.library.Container; import com.daasuu.library.DisplayObject; import com.daasuu.library.FPSTextureView; import com.daasuu.library.callback.AnimCallBack; import com.daasuu.library.drawer.BitmapDrawer; import com.daasuu.library.drawer.TextDrawer; import com.daasuu.library.util.Util; import java.util.Timer; import java.util.TimerTask; public class ParabolicMotionSampleActivity extends AppCompatActivity { private FPSTextureView mFPSTextureView; private Timer mTimer; private Bitmap mBitmap; private Container mTextContainer = new Container(); private Container mBitmapContainer = new Container(); public static void startActivity(Context context) { Intent intent = new Intent(context, ParabolicMotionSampleActivity.class); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_parabolic_motion); mFPSTextureView = (FPSTextureView) findViewById(R.id.animation_texture_view); mFPSTextureView .addChild(mBitmapContainer) .addChild(mTextContainer); Paint paint = new Paint(); paint.setColor(ContextCompat.getColor(this, R.color.colorPrimary)); paint.setTextSize(Util.convertDpToPixel(20, this)); final DisplayObject textDisplay = new DisplayObject(); textDisplay.with(new TextDrawer("Text", paint)) .parabolic() .transform(800, 800) .initialVelocityY(-40) .end(); mTextContainer.addChild(textDisplay); mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); } private void createParabolicMotionBitmap() { final DisplayObject bitmapDisplay = new DisplayObject(); bitmapDisplay.with(new BitmapDrawer(mBitmap).dpSize(this)) .parabolic() .transform(0, mFPSTextureView.getHeight()) .reboundBottom(false) .accelerationX((float) (15 + Math.random() * 7)) .initialVelocityY((float) (-65 + Math.random() * 15)) .bottomHitCallback(new AnimCallBack() { @Override public void call() { mBitmapContainer.removeChild(bitmapDisplay); } }) .end(); mBitmapContainer.addChild(bitmapDisplay); } @Override protected void onResume() { super.onResume(); mFPSTextureView.tickStart(); mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { for (int i = 0; i < 5; i++) { createParabolicMotionBitmap(); } } }, 0, 100); } @Override protected void onStop() { super.onStop(); mFPSTextureView.tickStop(); if (mTimer != null) { mTimer.cancel(); mTimer = null; } } }