Commit Graph

70 Commits

Author SHA1 Message Date
Chet Haase
0dfc398424 Fixed LayoutTransition bug moving multiple views
The problem was that there can be >1 animation spawned for each
view in a container, if there are multiple events that trigger
a transition. These animations would potentially clobber object
layout values, causing problems as successive animations tried to use those
clobbered values to set up their own animation values.

The fix is to track the created animations and cancel them as future
animations on those same objects get created. This mechanism used to
be in the code (the bug came about when that mechanism went away), but
was removed because of memory leaks of never removing animations that
were set up but never started. The new approach also caches pending
animations, but runs a second aniamtor to delete the entries in that
collection just in case.

Change-Id: If60c7d188712334dea69d0794dc6b4ce29ca6c09
2011-01-28 15:54:37 -08:00
Chet Haase
daf98e941e Use optimized display lists for all hwaccelerated rendering
Previously, display lists were used only if hardware acceleration
was enabled for an application (hardwareAccelerated=true) *and* if
setDrawingCacheEnabled(true) was called. This change makes the framework
use display lists for all views in an application if hardware acceleration
is enabled.

In addition, display list renderering has been optimized so that
any view's recreation of its own display list (which is necessary whenever
the visuals of that view change) will not cause any other display list
in its parent hierarchy to change. Instead, when there are any visual
changes in the hierarchy, only those views which need to have new
display list content will recreate their display lists.

This optimization works by caching display list references in each
parent display list (so the container of some child will refer to its
child's display list by a reference to the child's display list). Then when
a view needs to recreate its display list, it will do so inside the same
display list object. This will cause the content to get refreshed, but not
the reference to that content. Then when the view hierarchy is redrawn,
it will automatically pick up the new content from the old reference.

This optimization will not necessarily improve performance when applications
need to update the entire view hierarchy or redraw the entire screen, but it does
show significant improvements when redrawing only a portion of the screen,
especially when the regions that are not refreshed are complex and time-
consuming to redraw.

Change-Id: I68d21cac6a224a05703070ec85253220cb001eb4
2011-01-24 08:43:20 -08:00
Robert Ly
f99b782b9f Doc change: animation devguide topic
Change-Id: I52cdd29616f7f30784c0f8352c035493c8d413dc
2011-01-19 21:39:45 -08:00
Patrick Dubroy
8901ffab29 Add a method for clearing all animations on a thread. 2011-01-16 17:15:28 -08:00
Patrick Dubroy
7beecfaf3b Fix latent bug with reinitializing an ObjectAnimator. 2011-01-16 14:42:53 -08:00
Patrick Dubroy
51ae5fc2d2 Fix animation bugs caused by weak reference
Change-Id: I4c7bd9d4843c355efd9c89059462f19600c3be45
2011-01-16 14:23:15 -08:00
Chet Haase
b2ab04ffb6 Remove obsolete DoubleEvaluator
Change-Id: I4407468599061ff35c68589988fb1e897de28c69
2011-01-16 11:34:14 -08:00
Scott Main
2b90a9a714 fix sdk build breakage; remove invalid @note tag
Change-Id: Iaaf5a38388ceccdd0d1f3766523788f54f1dc8d2
2011-01-14 15:39:10 -08:00
Patrick Dubroy
ec84c3a189 Allow old view hierarchy to be GC'ed more quickly during rotation. 2011-01-14 14:13:31 -08:00
Chet Haase
9c0874408c Supress layout requests while a LayoutTransition is running.
LayoutTransition works by animating layout-related properties
(left, right, top, and bottom). This works great when that animation
is the only thing affecting the layout of the UI. But if there are other things
happening in the application that cause layout to run on that
container or in its parent hierarchy, this can cause the layout properties
on its children to get mis-set during the middle of the transition.
This results in artifacts like animating objects jumping to locations where
they would be were there no animation running.

The fix is to supress layout requests on that container (and its children)
until the transition is complete (then issue a layout request on the container
to make sure that the container has the correct layout data)

Change-Id: I15bf0423a11409f854076f86099233db7fe4edc0
2011-01-12 18:14:40 -08:00
Chet Haase
53ee3316bc Rename RGBEvaluator to ArgbEvaluator
Change-Id: Iee74b475960d623fa757349e4053bd7c58cf5734
2011-01-11 06:46:44 -08:00
Chet Haase
2954cd91ab Add start/endTransition events for CHANGE transitions
There was already a mechanism for sending out events for LayoutTransition
when animations started or ended, but the implementation only sent out events
for the appearing/disappearing animations. This fix provides callbacks to
listeners for the CHANGE_APPEARING and CHANGE_DISAPPEARING transitions, too.

Change-Id: Icfb8cc1c20d2df3e4a817255e96c9d0e94c1d8c4
2011-01-09 09:43:39 -08:00
Chet Haase
9e90a9953b Reuse display lists at the java level.
Objects are invalidated and reset instead of being nulled out
and recreated. This avoids creating small amounts of garbage for
the display list and canvas objects.

Change-Id: I464fac7ea8944c19ad6d03f13a95d9017e3f4262
2011-01-05 15:13:16 -08:00
Ben Komalo
cbda9104d0 Fix incorrect anonymous AnimatorListenerAdapter.
Change-Id: I0384a437089d11dda03d0657235404ea96e8b19d
2010-12-16 15:59:22 -08:00
Chet Haase
27c1d4debb Fix minor animation and doc issues
Change-Id: I0ea077d9434ac3e22e8600f22ca4a24a6a46965c
2010-12-16 15:25:52 -08:00
Chet Haase
48ea8d8362 Merge "Adding TimeAnimator capability (hidden for now)" 2010-12-14 09:18:33 -08:00
Chet Haase
051d35e41f Adding TimeAnimator capability (hidden for now)
This new class allows listeners to receive callbacks with elapsed time
that are sent on the same animation updates as other animators in the system.
It will allow simulations that go beyond the current animation system while
handling the actual animation timing system and ensuring that those
simulations sync up with other typical animations.

Change-Id: Iac91c39634218793f6598a7dec5ed71dc9630258
2010-12-14 09:17:02 -08:00
Chet Haase
e64ea87f96 Fix artifact with concurrent add/remove LayoutTransitions
There was a bug with LayoutTransitions where if the animations
were of different duration (such as in the current status bar clock),
it was possible to end up in a bad situation because the previous animation
might outlast the new animation, causing the opposite end result
from what was expected. The fix was to keep track of the current
add/remove animations and to cancel any running ones prior to starting
new ones.

Change-Id: I884ce33ce0671f6ba6153ee3951c8d14c5ed5714
2010-12-13 16:15:53 -08:00
Chet Haase
37f74cad46 Add ability to reuse bitmaps when loading new content
Change-Id: Ic5f5f40ee39787403977fb372b335dc21cf07243
2010-12-09 15:07:39 -08:00
Makoto Onuki
a52a5e7c4c Add space after property name in error message
Change-Id: I15c1acc468ff17a1ebd1bc28288d0ac7113748b2
2010-12-07 15:27:53 -08:00
Chet Haase
1a8e404743 Remove broken doc link to removed method
Change-Id: Id1b1ab8e15d9af9fa38946cc5c673062a4b5a72d
2010-12-07 11:29:39 -08:00
Chet Haase
e2ab7ccd38 Change cancel/end behavior of animations to be synchronous
Previously, cancel() and end() calls would simply log a message to
be handled later by the animation handler. This caused problems with
coordinating complex animations, where some start() events for
future animations would occur before end() events for animations already
completed.
The change is to make these events synchronous (and require them to be
called from the appropriate thread), simplifying the code and the usage.

Also, fixed various timing and event bugs in AnimatorSet, and removed
the getter/setter properties from ObjectAnimator, since an earlier change
makes these properties undesirable (because the code will use a faster
JNI approach instead of reflection when it can).

Change-Id: I05c16645c2a31a92048a6031ddb126eb4312a946
2010-12-07 10:44:08 -08:00
Chet Haase
2e1f5b0de3 Merge "Add methods to AnimatorSet that take collections" 2010-12-01 11:15:39 -08:00
Chet Haase
37a7bec599 Add methods to AnimatorSet that take collections
Change-Id: I5664bee6d27b32a70ca7d335e7fbe0af39a240bd
2010-12-01 11:05:59 -08:00
Chet Haase
5bed88e12d Animators can now have dimension and color values.
You can now use floats, ints, dimensions, or colors as input values
in XML for Animator objects. There is still a 'valueType' attribute
that lets you specify the number values to create the animator with,
though it defaults to floats (or in the case of color inputs, to ints).

Change-Id: I65f1df802db602c33f2a0308a663b6f808148e25
2010-12-01 08:11:29 -08:00
Chet Haase
7306668586 animation bugfix plus xml resources for new View properties
There was a bug around animation duration where it was possible,
for small durations or large inter-frame times, to calculate
fractions outside of the 0-1 range, causing bad value calculations.

Unrelated: new View properties for translation, scale, and rotation
were added in this release. This commit addes XML resources for
those properties.

Change-Id: Ieaf5dd729588adb2a40656aa82beecc3576f4af5
2010-11-30 11:11:43 -08:00
Chet Haase
2970c49938 various fixes for animations and javadocs
Issues around threading of animations and AnimatorSet bugs are
fixed in this change. Unrelated fixes to javadocs in other
framework classes are also part of the change.

Change-Id: I35f7e03ffdec9143bc2eb155e8f9384798ad35b3
2010-11-23 14:05:42 -08:00
Chet Haase
6e0ecb4eed Adding JNI methods as a faster reflection mechanism
This approach is only for the common cases of void-return,
single-argument float/int methods.

Change-Id: Ifb31535a6f717b85417eced93c579be6e461e039
2010-11-04 13:37:45 -07:00
Chet Haase
691ac26817 Fixed problem with setting updated values on existing animators
The previous version of PropertyValuesHolder handled construction fine,
but setting new values did not result in things getting completely set
up correctly for interpolation between those new values.

Change-Id: Ibffb16e58b4fe76b8d1cad6f0224ffd4d5404c05
2010-11-03 22:38:32 -07:00
Chet Haase
7c608f25d4 optimizing for primitive types in animations
The animator classes caused autoboxing by converting primitive types (by far
the most typical types used in animations) to be converted to their
Object equivalents because of various APIs that required Object
(like getValue() to get the animated value). This change creates
factory methods on some classes instead of the former constructors
so that we can create and return private type-specific subclasses
which operate directly on the primitive types instead.

In particular, float and int are natively supported by the animators
now. Support in the APIs for double and long was removed because it
seemed like these less common types did not justify the extra
baggage of the added API and code.

Change-Id: I6008a3883e3d6dd5225005f45f112af148e5a4ea
2010-11-03 17:42:04 -07:00
Chet Haase
70d4ba15b1 Performance optimizations for animations and toolkit
Change-Id: I316a48273a9cbb428a965e4b849b3e5e9e8202f1
2010-11-01 10:19:44 -07:00
Chet Haase
e3bc4e6f10 Use ThreadLocal for static Animator variables.
Certain fields in Animator are statics, like the list of current animations and the
main handler. However, since there may be >1 UI thread per process, these should really
be ThreadLocal variables, so that they are local to each UI thread. For example,
most animators will cause an invalidation in the view hierarchy, which can only
happen in the UI thread for that view.

Change-Id: I42be61c781ffac97b527f78ce1ffc2e0cdc42999
2010-10-27 13:48:02 -07:00
Brad Fitzpatrick
599ca29986 Expose (internally only) the number of animations currently running.
This will be used for StrictMode to annotate violations with
whether or not they janked up an animation.

Change-Id: I5bc691f49b74c45279cd2ae044d2a81dcf1204a9
2010-10-22 15:58:47 -07:00
Chet Haase
5c13d89c13 Optimizing display lists by referencing pointers to resources instead of copying them
Change-Id: I81ad3551d74aa1e5bb64d69e33d2eb29a6c1eb6a
2010-10-21 12:02:42 -07:00
Chet Haase
3a64f241fe Merge "Remove errant minus sign" 2010-10-14 15:07:30 -07:00
Chet Haase
51b3227c2e Remove errant minus sign
Change-Id: I39a76484884615aa86f4a845eb4637467ec5abc7
2010-10-14 14:59:39 -07:00
Chet Haase
fec30790e8 Removed obsolete trace statements
Change-Id: I98041460da3109201b13b00ff553eb3e7290debb
2010-10-14 14:23:30 -07:00
Chet Haase
2794eb3b02 Remove generics from Animator APIs
Change the manner of constructing Animator-related objects from constructors
via generics to factory methods with type-specific method names. Should
improve the proliferation of warnings due to generics issues and make the
code more readable (less irrelevant angle brackets Floating around).

Change-Id: Ib59a7dd72a95d438022e409ddeac48853082b943
2010-10-14 13:13:34 -07:00
Romain Guy
83d6e82132 Revert "Remove generics from Animator APIs"
This reverts commit 41f041d998.
2010-10-14 10:13:53 -07:00
Chet Haase
41f041d998 Remove generics from Animator APIs
Change the manner of constructing Animator-related objects from constructors
via generics to factory methods with type-specific method names. Should
improve the proliferation of warnings due to generics issues and make the
code more readable (less irrelevant angle brackets Floating around).

Change-Id: I7c1776b15f3c9f245c09fb7de6dc005fdba58fe2
2010-10-14 08:39:00 -07:00
Chet Haase
608fc3cbed Double the performance of animations.
There is a hard-coded limit to the frame rate of animations; this commit increases that rate by changing the inter-frame delay from 30 ms to 10 ms (although the actual delay will be determined by the maximum refresh rate of the system and the system load). For example, the effective maximum on current devices is 55 fps, or a delay of about 16 ms.

Change-Id: Id96a41cef36851e2d9508a98934f4b25595251ea
2010-10-11 08:47:13 -07:00
Chet Haase
e0ee2e9f31 New TimeInterpolator interface for android.animation package.
The new animation package's reliance on the old Interpolator interface (in
android.view.animation) was an eyesore. Adding TimeInterpolator, and having the
old Interpolator interface extend it, allows the new Animator classes to break
the tie to the older animation package completely. However, developers can still
use the older Interpolator-based classes, such as AccelerateInterpolator,
because they all implicitly extend the new TimeInterpolator class.

Change-Id: I41132fa56167ba564f4839113289114d0ea31a92
2010-10-07 12:27:06 -07:00
Chet Haase
5d6d7b9c3d Changed LayoutTransition to disable animations when set to null
Change-Id: Ic4d67135a273ea816c3d15bce05da611bd6bae53
2010-10-04 16:58:04 -07:00
Chet Haase
5e25c2c145 Add ability to automate animated transitions on View show/hide
Change-Id: Id6ff92c8fd06c3f5fb30c41b020b4de4f567154f
2010-10-04 15:11:36 -07:00
Chet Haase
0e0590bf3c bug fixes in animation classes
Change-Id: I5465bc95032c94851b8cf4e4db3477f546e8b0d1
2010-09-26 13:05:09 -07:00
Jim Miller
3060421045 Add new WaveView widget to framework and integrate into LockScreen.
This adds a new "Energy Wave" widget to the internal widgets and
integrates it into LockScreen.

ValueAnimator needed a slight modification since it expects to
be run inside of Activities with a Looper. Additionally, this adds
an API, removeAllUpdateListeners(), which is needed to properly
recycle ValueAnimator objects.

Some minor code cleanup and UI tweaks after review.

Changed delay timeout from 1.3s to 0.5s.

Change-Id: Ibcf015e61fa8ba79d62f2019f1b29ace7caa00c8
2010-09-23 17:14:48 -07:00
Joe Onorato
9316232130 Fix broken javadoc.
Change-Id: I4729ebee36117f281af613e0b49f70d7dee5f334
2010-09-16 16:01:53 -04:00
Chet Haase
b20db3ec34 Make fragment animations work when fragments go away
Change-Id: I136de6ef910cc02b8181fcfa065bdb0770841396
2010-09-10 17:43:04 -07:00
Chet Haase
634a20acf7 Fix bug with LayoutTransition when layouts are just coming on line
Change-Id: Ia7061d8ec138f8f7aea822596f46b3549a996700
2010-09-08 17:17:25 -07:00
Chet Haase
a18a86b43e Rename several animation classes
Change-Id: I6a4544875090db485163c8d56de8718f56d267c7
2010-09-08 09:41:21 -07:00