I know this is quite the same question as <a href="https://stackoverflow.com/questions/7233830/partial-invalidation-in-custom-android-view-with-hardware-acceleration" rel="nofollow">partial-invalidation-in-custom-android-view-with-hardware-acceleration</a> but I thought I will explain my problem more detailled and hope someone will have an answer on how to solve the problem.
I wrote a simple TicTacToe app which was working fine on the emulator. But wasn't working on the device since I found out it was working as expected on the device when I disabled hardware acceleration.
All the fields are drawn with
Canvas.drawBitmap(), also the "empty" fields with an empty white image. The lines are drawn with
I'm using partial invalidation with
invalidate(Rect) because I want to redraw only the area which was choosen to set a cross/circle with the according image using again
Canvas.drawBitmap(). But then the whole area is invalidated, means I see the whole area/screen is gray (the white images and lines disappeared) and only the image for the cross/circle is set in the choosen area.
When I print out the invalidated field rect with
Canvas.getClipBounds() in the method
onDraw(), with hardware acceleration it is the whole area (example "0,0,320,407") and without hardware acceleration the same rect which I invalidated with
invalidate(Rect) (e.g. "106,135,106,135").
At the moment as workaround I redraw all the fields whith the according image and lines. How can I prevent to have the whole area invalidated with hardware acceleration?
If this matters: I'm using Android version 4.1.2 on Samsung Galaxy Young Duos S6312.
I have post my answer in your given <a href="https://stackoverflow.com/questions/7233830/partial-invalidation-in-custom-android-view-with-hardware-acceleration" rel="nofollow">link</a>. To understand the problem , you should know the difference between software rendering and hardware rendering. That's really a big topic which I won't cover here. I think the best approach is to read the <a href="https://github.com/android/platform_frameworks_base/" rel="nofollow">source code</a>(I did the same thing a few days ago). The key question is "what is
DisplayList and when it is used"
. Repeat my answer here, the
onDraw is simply used to rebuild the DisplayList. That doesn't mean everything in your View will be redrawn.