This app includes a series of images of a teddy bear. By dragging his "features" (paws, ears, etc), the user changes the image, thereby moving the bear around. Some features include:
I created this app in 2009 as a way to introduce myself to Android development. At the time, it was simpler for me to first develop a prototype app using Java Swing. I extracted the non-platform-specific code (basically everything but UI logic) from the prototype app into a library, libnounours (https://github.com/caarmen/libnounours), which I then included in this Android app.
The project was closed-source until 2015, when I decided to publish it on GitHub. The legacy code from 2009 was not too clean, as I was just discovering Android development at the time: The project had unusual naming conventions, unusual logging, messy hairs added to the code as I tried to resolve memory issues when loading bitmaps...
This app was selected as one of 10 "Prix du Public" finalists in the "SFR Jeunes Talents Développeurs" competition in Paris on May 13, 2009. http://www.pointgphone.com/resultats-concours-android-sfr-jeunes-talents-developpeurs-2636/
I have tried to clean up the project a bit. I've:
PreferenceActivity
.Nevertheless, the original 2009 design and implementation of the project is still visible, and this project is not the first one I would show off to prospective employers or clients :)
Android development was pretty new itself at the time this app was created: Android 1.5 Cupcake (API level 3) was released while this app was being developed. Mostly for nostalgic reasons, this app still supports API level 3. As a result, this project has a few unusual attributes compared to a typical modern Android project:
compat
package exists, with classes such as Api8Helper
.
Prior to Android 2.0 Eclair, app code calling framework methods at higher API levels could not be
loaded, even if proper checks on Build.VERSION
ensured it would never be executed. The
result would be a AndroidRuntime: java.lang.VerifyError: com.mycompany.MyClass
. To prevent
this, code for higher API levels must be completely isolated into separate classes.Build.VERSION.SDK
instead of the int Build.VERSION.SDK_INT
.