Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7728997
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 1, 20262026-06-01T05:51:28+00:00 2026-06-01T05:51:28+00:00

So I have an animation that is being created by having a bunch of

  • 0

So I have an animation that is being created by having a bunch of bitmaps drawn in the onDraw() method of a custom view. There is an update thread that calls a method in the custom view that changes the positions of the bitmaps to be drawn by the onDraw() method. What I would like to do is to save the bitmap created each time the update thread is finished so that i can create a gif from the bitmaps that i save.

I found the below code to save a png from a bitmap stored in memory to the SD card and that works with a stored bitmap but I’m having trouble with getDrawingCache():

public void saveView(){
    if(counter < 200){
        try {
            counter++;
            System.out.println("Counter : " + counter);
            File file = new File(path, "star"+counter+".png");
            file.delete();
            OutputStream fOut = new FileOutputStream(file);
            buildDrawingCache();
            getDrawingCache().compress(Bitmap.CompressFormat.PNG, 100, fOut);
            destroyDrawingCache();
            fOut.flush();
            fOut.close();
            MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Doing this essentially does two things right now:

1) It takes about 50 images and saves them to the sd card. @ around 50 it causes the heap to get to large (i guess destroyDrawingCache() is unable to actually finish due to this is in a seperate thread)

2) In the pictures taken, you can see the scan lines from the buffer updating because I’m taking from a buffer that gets updated.

It would seem the getDrawingCache calls onDraw() as well which is why I can’t have this on the UI thread in the onDraw itself.

If this is possible please help.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-01T05:51:30+00:00Added an answer on June 1, 2026 at 5:51 am

    You should not call getDrawingCache() from outside the UI thread. That’s why the bitmaps you get have partially updated scan lines. Call saveView() directly from onDraw(). Only the file operations may be run on separate threads after making a clone of the cached bitmap.

    Note: You can call setDrawingCacheEnabled(true)? so that you don’t have to call buildDrawingCache() and destroyDrawingCache(). Also if your device has hardware acceleration is turned on, you’ll have to call setLayerType(LAYER_TYPE_SOFTWARE, null).

    Another solution is to get the bitmap by calling View.draw(android.graphics.Canvas) on a new canvas that holds a blank bitmap.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have created a jQuery animation that can be seen by clicking the Preview
I have what I thought was a relatively easy Ajax/animation that I'm adding to
I have an animation on a partially hidden div container that will execute when
I have a Flex App that allows you to dynamically build an animation. It
I have a UIImageView object that when clicked it will play a animation, I
I have this complicated slider that utilizes tons of animation. I'm trying to find
I have a UIImageView that is displaying a series of pictures as an animation.
I have an ImageView that is 250dp above the bottom and with translate animation
As titled, how can I do that? I have been reading some Silverlight/WPF animation
This is a situation that comes up often: In the View, you have a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.