Development issue/problem:

I want to use a specific animation, for example B. Bouncing in the web. Can animation interpolators be used internally?

In my case I want to rotate the image from 0 to 180 degrees, with a bounce at the end.

How is that possible?

How can I solve this problem?

The Android animation class applies to objects such as views and layouts. A canvas is simply a painting surface that is part of a view or associated with a bitmap. With onDraw in custom view, only one frame is drawn behind the frame until the next invalidation is called, which means you need to draw an animated frame behind the frame. Here is an example of a bouncing ball spinning that you might find useful

import android.content.Context;
import android.os.bundle;
import android.text.format.time;
import android.view. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, look, look, look, look, look. Look, um..;

the public class StartActivity expands the activity {

public void onCreate(Bundle storedInstanceState) {
setContentView(new BallBounce(this));

The BallBounce class extends visibility {
int screenW;
int screenH;
int X;
int Y;
int initialY;
int ballW;
int ballH;
int angle;
float dY;
float acc;
bitmap ball, bgr ;

public BallBounce(Context context) {
ball = BitmapFactory.decodeResource(getResources(),; // Load ball image
bgr = BitmapFactory.decodeResource(getResources(),R.drawable.sky_bgr); // Load ball
ballW = ball.getWidth();
ballH = ball.getHeight();
acc = 0.2f; // Acceleration
dY = 0; // Vertical speed
initialY = 100; // Initial vertical position.
angle = 0; // Initial value for angle of rotation.

public void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
screenW = w;
screenH = h;
bgr = Bitmap.createScaledBitmap(bgr, w, h, true); //Size background to fit screen.
X = (int) (screenW /2) – (ballW / 2); // Center the ball in the centre of the screen.
Y = initial Y;

public blank onDraw(Canvas) {
super.onDraw(Canvas canvas) ;

/sign the background.
canvas.drawBitmap(bgr, 0, 0, null) ;

// Calculate the speed and estimated position of the ball.
Y+= (int) dY; // Lowers or declines the vertical position.
if (Y > (screenH – ballH)) {
dY=(-1)*dY; //backward speed on the ground stroke.
dY+= acc; //Backward speed.

//small angle of rotation.
, if (angle++ >360)
angle =0 ;

//Sign a ball; //Save the position of the canvas.
canvas.rotate (angle, X + (ballW / 2), Y + (ballH / 2)); //Rotate cloth.
canvas.drawBitmap (ball, X, Y, zero); //Sign the ball on the rotated canvas.
canvas.restore(); //Rotate the canvas to give the impression that the ball is rotated.

//call up the next image.

It’s a simple illustration, but I would use surfaceView and introduce images from another stream, which is a bit more complicated, but just as I create interactive animations like games, etc., I would use surfaceView to create a new stream. Here is an example with backward scrolling, and the user can move the ball with his finger:

import android.content.Context;
import android.os.bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView ;

public class SurfaceViewActivity expands the activity {
BallBounces ball ;

public void onCreate(Bundle savedInstanceState) {
ball = new BallBounces(this);

The BallBounces class extends the SurfaceView with the SurfaceHolder.callback {GameThread thread;int screenW; //Device screen screenH; //Device screen ballX; ///bal x ballY; /// ball y initialY;float dY; /// ball vertical ballW;int ballH;int bgrW;int bgrH;int bgrScroll;int dBgrY; ///The scrollspeed of the bottom.float acc;bitmap ball, bgr, bgrReverse;boolean reverseBackgroundFirst;boolean balFingerMove ;

/Frames per second.
non long;
int framesCount=0;
int framesCountAvg=0;
long framesTimer=0;
Paint fpsPaint=new Paint() ;

long timeNow;
long timePrev = 0;
long timePrevFrame = 0;
long timeDelta ;

public BallBounces(Context context) {
ball = BitmapFactory.decodeResource(getResources(),; //Load ball image.
bgr = BitmapFactory.decodeResource(getResources(),R.drawable.sky_bgr); //Load background.
ballW = ball.getWidth();
ballH = ball.getHeight() ;

/Create a flag for the onDraw method to change the background with its mirror image.
reverseBackgroundFirst = false ;

//Initialize the animation variables.
acc = 0.2f; //Acceleration
dY = 0; //Vertical speed
initialY = 100; //Vertical position initialized
angle = 0; //Start angle of rotation
bgrScroll = 0; //Background scroll position
dBgrY = 1; //Background scroll speed

fpsPaint.setTextSize(30) ;

//Set flow
getHolder().addCallback(this) ;


public void onSizeChanged (int w, int h, int oldw, int oldh) {
super.onSizeChanged (w, h, oldw, oldh);
//This event method returns the current size of this custom view.
screenW = w ;
screenH = h ;

bgr = Bitmap.createScaledBitmap(bgr, w, h, true); //Scale background to fit screen.
bgrW = bgr.getWidth() ;
bgrH = bgr.getHeight() ;

// Make a mirror image of the background (horizontal mirror) – for a circular background.
Matrix = new matrix(); //Set a frame or shape for the image.
matrix.setScale (-1, 1); //Horizontal mirror effect.
bgrReverse = Bitmap.createBitmap(bgr, 0, 0, bgrW, bgrH, array, true); //Create a new mirroring by applying the array.

ballX = (int) (screenW /2) – (ballW / 2); //Central ball X in the middle of the screen.
ballY = -50; //Central ball height above the screen.

//************* TOUCH *****************
public synchronized boolean onTouchEvent(MotionEvent ev) {

(ev.getAction()) {
case MotionEvent.ACTION_DOWN: {
ballX = (int) ev.getX() – ballW/2 ;
ballY = (int) ev.getY() – ballH/2 ;

balFingerMove = true;

case MotionEvent.ACTION_MOVE: {
ballX = (int) ev.getX() – ballW/2 ;
ballY = (int) ev.getY() – ballH/2 ;


case MotionEvent.ACTION_UP:
ballFingerMove = false;
dY = 0;
return true;

public blank onDraw(Canvas) {
super.onDraw(Canvas canvas) ;

/Sign a scrolling background. // Draw a scrolling background.
Rect ofRect1 = new Rect(0, 0, bgrW – bgrScroll, bgrH);
Rect toRect1 = new Rect(bgrScroll, 0, bgrW, bgrH) ;

Rect ofRect2 = new Rect(bgrW – bgrScroll, 0, bgrB, bgrH);
Rect toRect2 = new Rect(0, 0, bgrScroll, bgrH) ;

if (!reverseBackgroundFirst) {
canvas.drawBitmap(bgr, vanRect1, toRect1, null);
canvas.drawBitmap(bgrReverse, vanRect2, toRect2, null);
canvas.drawBitmap(bgr, fromRect2, toRect2, null);
canvas.drawBitmap(bgrReverse, fromRect1, toRect1, null);
} canvas.

// The following value for the background position.if ((bgrScroll += dBgrY) >= bgrW) {bgrScroll = 0;reverseBackgroundFirst = !}

// Calculate approximately the speed and position of the ball/
as (!ballFinger movement) {
ballY += (int) dY; /// Decrease or decrease the vertical position.
if (balY > (screenH – balH)) {
dY=(-1)*dY; /// Speed back to the bottom of the ball.
dY+= acc; // Decrease or decrease speed.

// Remove rotation angle
if (angle++ >360)
angle =0 ;

//Rotate method
matrix = new matrix();
Matrix.postRotate(angle, (ballW / 2), (ballH / 2)); //Rotate.
Matrix.postTranslate(ballX, ballY); //Translate to x, y position.
canvas.drawBitmap (ball, matrix, null); //Translate the ball with the matrix on it.

*// Turn the second method; //Save the position of the canvas matrix.
canvas.rotate (angle, billeX + (billeW / 2), billeY + (billeH / 2)); //Save the position of the canvas matrix.
canvas.drawBitmap (ball, ballX, ballY, null); //Take the ball by applying a twisted canvas matrix.
canvas.restore(); //Rotate the canvas array to the saved position – only the bitmap was rotated, not the entire canvas.


// Measurement of the frame rate (unit: frames per second).
canvas.drawText(framesCountAvg+ fps, 40, 70, fpsPaint);
if(now-frameTimer>1000) {

publicly invalid surfaceModified (Surface holder, size int, width int, height int) {

public empty areaCreated(SurfaceHolder holder) {
thread = new GameThread(getHolder(), this) ;
thread.setRunning(true) ;
thread.start() ;

public null surfaceDestroyed (Surface holder) {
boolean retest = true;
while (retest) {
try {
retest = false;
} catch (InterruptedException e) {


The GameThread class expands Thread {
private SurfaceHolder surfaceHolder ;
private BallBounces gameView ;
private boolean run = false ;

public gameThread(SurfaceHolder surfaceHolder, BallBounces gameView) {
this.surfaceHolder = surfaceHolder;
this.gameView = gameView;

public invalid setRunning(boolean run) { = run;

public SurfaceHolder getSurfaceHolder() {
return surfaceHolder;

public void run() {
Canvas c ;
while (run) {
c = null ;

//Limiting the frame rate to a maximum of 60 frames per second
timeNow = System.currentTimeMillis();
timeDelta = timeNow – timePrevFrame;
if ( timeDelta

Here are the pictures:

How can I use the animation framework inside the canvas? –

How can I use the animation framework inside the canvas? –

Good luck!

canvas animation codepen,simple canvas animation,canvas animation library,canvas animation w3schools,canvas animation background,canvas arc animation,html5 canvas image animation,html image animation effects,html5 animation adobe,html5 canvas animate rectangle,canvas animate object along path,html5 canvas smooth animation,html5 canvas easing,javascript canvas animation library,how to make a circle move in javascript,html5 canvas move object with mouse,javascript bouncing ball animation,javascript animation,requestanimationframe,circle to rectangle animation android,android pulsing circle animation,animate bitmap on canvas android,android canvas draw circle animation,android canvas tutorial for beginners,drawing and working with animation in android,android canvas draw line animation,android animate canvas

You May Also Like

Steps To Start And Join Live Voice Chat On Telegram

To attract more users to its cloud-based instant messaging solution, Telegram announced…

4 Browsers that are Super Awesome

Facebook Twitter Pinterest Reddit Messenger WhatsApp Xbox One supports a wide range…

Discord installation has failed in Windows 10

Talk about the most popular Voice over IP (VoIP) application used by…

URBN Power Bank Review, Made In India Power Bank, 18W, QC 3.0 + PD

The Indian smartphone accessory brand URBN has recently launched its latest thin…