5w4rley
5w4rley

Reputation: 363

imageView.setImageBitmap(Bitmap) slows my app extremly

i have written a litte app that should display a tacho that gets it data about rpm... over bluetooth. when the data changes i rotate a needle and some other imageViews to display the current values on the screen.

rotate code:

bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(), true);
canvasRpm.setBitmap(bMapRpm);
canvasRpm.save();
canvasRpm.rotate((float)Rpmdegree+(float)Rpmcurrentdegree,bMapRpm.getWidth()/2,bMapRpm.getHeight()/2);
canvasRpm.drawBitmap(bMapNadel,0,0,paint);
canvasRpm.restore();

bMapcanvasBackTacho is just a transparent background. bMapNadel is the bitmap of the needle. bMapRpm is the bitmap of the canvas to draw on

to update the imageView i allways call:

ivNadel.setImageBitmap(bMapRpm);

i tryed out what slows the app by commenting parts of the code out. after commenting the setImageBitmap() out the slow down disapeared.

doese someone know how to update the imageView in an other way or whta i could change to get it to work faster?

thx =)

Upvotes: 3

Views: 3062

Answers (1)

Jave
Jave

Reputation: 31846

You can do two things:
First, don't call copy() each time you need to update the Bitmap this creates a new Bitmap and is both time and memory consuming.
Second, call invalidate() on the ImageView. This will notify the View that something has changed and it redraws itself without having to update anything else that is happening when you replace the Bitmap completely.

In the end you might even want to create your own View implementation so you can just override onDraw() and perform rotations there.

Upvotes: 3

Related Questions