SlideShare a Scribd company logo
Android	
  Drawing	
  and	
  Anima-on	
  

                Jussi	
  Pohjolainen	
  
    Tampere	
  University	
  of	
  Applied	
  Sciences	
  
Android	
  Graphics	
  
•  Custom	
  2D	
  Graphics	
  
    –  android.graphics.drawable	
  package	
  
•  OpenGL	
  ES	
  1.0	
  high	
  performance	
  3D	
  graphics	
  
    –  javax.microedition.khronos.opengles	
  
       package	
  
•  In	
  this	
  lecture,	
  we	
  will	
  concentrate	
  on	
  the	
  2D	
  
   graphics	
  
DRAWABLES	
  AND	
  SCREEN	
  SIZES	
  
Drawables	
  
•  A	
  Drawable	
  is	
  a	
  general	
  abstrac-on	
  for	
  
   “something	
  that	
  can	
  be	
  drawn”	
  
    –  BitmapDrawable, ShapeDrawable,
       LayerDrawable …
•  How	
  to	
  define	
  and	
  instan-ate	
  Drawable?	
  
    1.  Use	
  image	
  saved	
  to	
  project	
  resources	
  
    2.  XML	
  file	
  that	
  defines	
  drawable	
  proper-es	
  
    3.  In	
  Java	
  
1.	
  Use	
  image	
  saved	
  to	
  project	
  resources	
  

•  Supported	
  types:	
  PNG	
  (preferred),	
  JPG	
  
     (acceptable)	
  and	
  GIF	
  (discoured)	
  
•  Add	
  the	
  file	
  to	
  res/drawable	
  
•  Refer	
  using	
  the	
  R	
  –	
  class	
  
•  Use	
  it	
  from	
  Java	
  or	
  XML	
  
	
  
Save	
  Image	
  to	
  Project	
  
Screen	
  Sizes	
  
•  Android	
  supports	
  different	
  screen	
  sizes	
  
•  Simplifying	
  developer’s	
  work:	
  
       –  4	
  generalized	
  sizes:	
  small,	
  normal,	
  large,	
  xlarge	
  
       –  4	
  generalized	
  densi-es:	
  ldpi,	
  mdpi,	
  hdpi,	
  xhdpi	
  
	
  
Emulators	
  for	
  different	
  Screen	
  Sizes	
  
Resources	
  
res/layout/my_layout.xml            //   layout   for   normal screen size
res/layout-small/my_layout.xml      //   layout   for   small screen size
res/layout-large/my_layout.xml      //   layout   for   large screen size
res/layout-large-land/my_layout.xml //   layout   for   large screen size in landscape mode
res/layout-xlarge/my_layout.xml     //   layout   for   extra large screen size

res/drawable-lhdpi/my_icon.png      // image for low density
res/drawable-mdpi/my_icon.png       // image for medium density
res/drawable-hdpi/my_icon.png       // image for high density

res/drawable-nodpi/composite.xml    // density independent resource
Displaying	
  Image	
  using	
  Java	
  
public class DrawingExamples extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         Context mContext = getApplicationContext();
         Resources res     = mContext.getResources();
         Drawable drawable = res.getDrawable(R.drawable.androidlogo);

         ImageView imageview = new ImageView(this);
         imageview.setImageDrawable(drawable);

         setContentView(imageview);
     }
}
Easier	
  way	
  
public class DrawingExamples extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ImageView imageview = new ImageView(this);
        imageview.setImageResource(R.drawable.androidlogo);

        setContentView(imageview);
    }
}
Or	
  use	
  it	
  via	
  the	
  XML	
  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/
res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent”>

   <ImageView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/androidlogo" />


</LinearLayout>
2D	
  DRAWING	
  
Drawing	
  on	
  a	
  View	
  
•  If	
  no	
  significant	
  frame-­‐rate	
  speed	
  needed,	
  
   draw	
  to	
  custom	
  View
•  Extend	
  View	
  and	
  define	
  onDraw	
  –	
  method	
  
•  onDraw() is	
  called	
  automa-cally	
  
•  Redraw:	
  invalidate()
•  Inside	
  onDraw(),	
  Canvas	
  is	
  given	
  
Simple	
  2D	
  Drawing:	
  View	
  
public class CustomDrawableView extends View {

    public CustomDrawableView(Context context, AttributeSet attr) {
         super(context, attr);
    }

    protected void onDraw(Canvas canvas) {
         // Paint class holds style information
         Paint myPaint = new Paint();
         myPaint.setStrokeWidth(3);
         myPaint.setColor(0xFF097286);
         canvas.drawCircle(200, 200, 50, myPaint);
         invalidate();
    }
}
Simple	
  2D	
  Drawing:	
  View	
  
<fi.tamk.CustomDrawableView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
 />
ShapeDrawable
•  With	
  ShapeDrawable,	
  one	
  can	
  draw	
  primi-ve	
  
   2D	
  shapes	
  
   –  ArcShape, OvalShape, RoundRectShape,
      PathShape, RectShape
•  ShapeDrawable	
  takes	
  Shape	
  object	
  and	
  
   manages	
  it	
  into	
  screen	
  
•  Shapes	
  can	
  be	
  defined	
  in	
  XML	
  
Shape	
  Drawable	
  in	
  Java	
  
// Drawing primitive 2D shapes
public class CustomDrawableView extends View {
    private ShapeDrawable mDrawable;

    public CustomDrawableView(Context context) {
        super(context);

                int   x = 10;
                int   y = 10;
                int   width = 300;
                int   height = 50;

            mDrawable = new ShapeDrawable(new OvalShape());
            mDrawable.getPaint().setColor(0xff74AC23);
            mDrawable.setBounds(x, y, x + width, y + height);
        }

    protected void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
    }
}
Shape	
  Drawable	
  in	
  XML	
  
// res/drawable-xxx/myshapes.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

  <gradient
     android:angle="90"
     android:startColor="#ffffff"
     android:endColor="#ff0000"
     android:type="linear" />


  <size android:width="60dp"
        android:height="40dp" />

</shape>
Shape	
  Drawable	
  in	
  XML	
  
// res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/myshapes" />


</LinearLayout>
Result	
  
ANIMATION	
  
About	
  Anima-on	
  
–  1)	
  View	
  Anima<on	
  
   •  Any	
  View	
  object	
  to	
  perform	
  tweened	
  anima-on	
  and	
  frame	
  
      by	
  frame	
  anima-on	
  
   •  Tween	
  anima-on	
  calculates	
  anima-on	
  given	
  informa-on:	
  
      start,	
  end,	
  size,	
  rota-on	
  and	
  other	
  
   •  Frame	
  by	
  frame:	
  series	
  of	
  drawables	
  one	
  ader	
  another	
  
–  2)	
  Property	
  Anima<on	
  System	
  (Android	
  3.x)	
  
   •  “Animate	
  almost	
  anything”	
  
   •  Define	
  anima-on	
  to	
  change	
  any	
  object	
  property	
  over	
  -me,	
  
        whether	
  in	
  screen	
  or	
  not	
  
   	
  
Differences	
  
•  View	
  
    +	
  Less	
  -me	
  to	
  setup	
  
    +	
  Less	
  code	
  to	
  write	
  
    -­‐	
  Only	
  View	
  objects	
  
    -­‐	
  Only	
  certain	
  aspects	
  to	
  animate	
  (scaling,	
  rota-ng..)	
  
    -­‐	
  View	
  itself	
  is	
  not	
  modified	
  when	
  anima-ng	
  
•  Property	
  anima<on	
  system	
  
    +	
  Anima-ng	
  also	
  non	
  View	
  objects	
  
    +	
  Anima-ng	
  any	
  property	
  of	
  any	
  object	
  
    -­‐  More	
  work	
  
VIEW	
  ANIMATION	
  
About	
  View	
  Anima-on	
  
•  View	
  anima-on	
  can	
  be	
  1)	
  tween	
  or	
  2)	
  frame	
  by	
  
   frame	
  anima-on	
  
•  Tween	
  anima-on	
  
    –  Can	
  perform	
  series	
  of	
  simple	
  transforma-ons	
  
       (posi-on,	
  size,	
  rota-on,	
  transparency)	
  on	
  View	
  object	
  
    –  In	
  XML	
  or	
  in	
  code	
  
•  Frame	
  anima-on	
  
    –  Sequence	
  of	
  different	
  images	
  
    –  In	
  XML	
  or	
  in	
  code	
  
1)	
  Tween	
  anima-on	
  
•  Preferred	
  way:	
  Define	
  in	
  XML	
  
•  Anima-on	
  xml	
  is	
  stored	
  in	
  res/anim	
  directory	
  
•  Root	
  element	
  can	
  be:	
  alpha,	
  scale,	
  translate,	
  
   rotate	
  or	
  set	
  that	
  holds	
  groups	
  of	
  these	
  
   elements	
  
Tween	
  Anima-on:	
  XML	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>
Tween	
  Anima-on:	
  Java	
  

TextView v = (TextView) findViewById(R.id.textview1);

Animation myanimation =
   AnimationUtils.loadAnimation(this, R.anim.myanimation);

v.startAnimation(myanimation);
Basic	
  Defini-ons	
  
•  <alpha>
  –  fade-­‐in	
  or	
  fade-­‐out	
  anima-ons.	
  	
  
•  <scale>
  –  Resizing	
  anima-on.	
  	
  
•  <translate>
  –  Ver-cal	
  and	
  or	
  horizontal	
  movement.	
  
•  <rotate>
  –  A	
  rota-on	
  of	
  an	
  anima-on	
  
Example	
  of	
  Translate	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
        <translate android:fromXDelta="0"
                   android:fromYDelta="0"
                     android:toXDelta="0"
                     android:toYDelta="100%p"
                     android:duration="700"
                     android:repeatMode="reverse"
                     android:repeatCount="1"
                     />
</set>                                                      Start	
  from	
  0,0	
  
                                                End	
  to	
  0,	
  100%	
  from	
  parent	
  
                                                         Dura-on	
  is	
  700	
  
                                                Repeat	
  in	
  reverse	
  one	
  -me	
  
Android 2D Drawing and Animation Framework
Scale	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">

         <scale
              android:fromXScale="1"
              android:fromYScale="1"

              android:toXScale="6"
              android:toYScale="6"
              android:duration="700"
              android:repeatMode="reverse"
              android:repeatCount="1" />

</set>
Android 2D Drawing and Animation Framework
Rotate	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">

      <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="700"
            />

</set>
Android 2D Drawing and Animation Framework
Alpha	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/
android"
     android:shareInterpolator="false">

      <alpha
          android:fromAlpha =    "1"
          android:toAlpha    =   "0"
          android:duration   =   "1000"
          android:repeatMode =   "reverse"
          android:repeatCount=   "1" />

</set>
Android 2D Drawing and Animation Framework
Using	
  Several	
  Anima-ons	
  

<?xml	
  version="1.0"	
  encoding="um-­‐8"?>	
                                     <scale
<set	
  xmlns:android="hpp://schemas.android.com/apk/res/                                   android:fromXScale    =   "1"
android"	
  
                                                                                            android:fromYScale    =   "1"
	
  	
  	
  	
  	
  android:shareInterpolator="false">	
  	
  	
  	
  	
  	
  
                                                                                            android:toXScale      =   "6"
	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <alpha	
  
                                                                                            android:toYScale      =   "6"
	
  	
  	
  	
  	
  	
  	
  android:fromAlpha	
  	
  =	
  "1"	
                             android:pivotX        =   "50%"
	
  	
  	
  	
  	
  	
  	
  android:toAlpha	
  	
  	
  	
  =	
  "0"	
                       android:pivotY        =   "50%"
	
  	
  	
  	
  	
  	
  	
  android:dura-on	
  	
  	
  =	
  "1000"	
                        android:duration      =   "1000"
	
  	
  	
  	
  	
  	
  	
  android:repeatMode	
  =	
  "reverse"	
                          android:repeatMode    =   "reverse"
	
  	
  	
  	
  	
  	
  	
  android:repeatCount=	
  "1"	
  />	
                             android:repeatCount   =   "1" />
	
  	
  	
  	
  
	
  	
  	
  	
  	
  <rotate	
                                                      </set>
	
  	
  	
  	
  	
  	
  	
  android:fromDegrees	
  =	
  "0"	
  
	
  	
  	
  	
  	
  	
  	
  android:toDegrees	
  	
  	
  =	
  "360"	
  
	
  	
  	
  	
  	
  	
  	
  android:pivotX	
  	
  	
  	
  	
  	
  =	
  "50%"	
  
	
  	
  	
  	
  	
  	
  	
  android:pivotY	
  	
  	
  	
  	
  	
  =	
  "50%"	
  
	
  	
  	
  	
  	
  	
  	
  android:dura-on	
  	
  	
  	
  =	
  "1000"	
  	
  
	
  	
  	
  	
  	
  	
  	
  android:repeatMode	
  	
  =	
  "reverse"	
  
	
  	
  	
  	
  	
  	
  	
  android:repeatCount	
  =	
  "1"	
  />	
  
Android 2D Drawing and Animation Framework
Interpola-on	
  
•  Interpola-on	
  is	
  an	
  anima-on	
  modifier	
  defined	
  
   in	
  xml	
  
•  Rate	
  of	
  change	
  in	
  anima-on	
  
   –  Accelerate,	
  decelerate,	
  bounce…	
  
Example	
  of	
  Interpola-on	
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="true"
     android:interpolator="@android:anim/bounce_interpolator"
     >

      <translate android:fromXDelta="0"
              android:fromYDelta="0"
              android:toXDelta="0"
              android:toYDelta="100%p"
              android:duration="700" />



</set>
Android 2D Drawing and Animation Framework
Different	
  Interpola-ons	
  
2)	
  Frame	
  Anima-on	
  
•  Create	
  XML	
  file	
  that	
  consists	
  of	
  sequence	
  of	
  
     different	
  images	
  
•  Root-­‐element:	
  <anima-on-­‐list>	
  and	
  series	
  of	
  
     child	
  elements	
  <item>	
  
	
  
Example	
  
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/
android"
    android:oneshot="false">
    <item android:drawable="@drawable/a1" android:duration="200" />
    <item android:drawable="@drawable/a2" android:duration="200" />
    <item android:drawable="@drawable/a3" android:duration="200" />
    <item android:drawable="@drawable/a4" android:duration="200" />
    <item android:drawable="@drawable/a5" android:duration="200" />
    <item android:drawable="@drawable/a6" android:duration="200" />
    <item android:drawable="@drawable/a7" android:duration="200" />
    <item android:drawable="@drawable/a8" android:duration="200" />
</animation-list>
Star-ng	
  the	
  Frame	
  Anima-on	
  
ImageView player = (ImageView) findViewById(R.id.player);
player.setImageResource(R.drawable.frameanimation);
AnimationDrawable anim = (AnimationDrawable) player.getDrawable();
anim.start();
Honeycomb	
  Feature!	
  

PROPERTY	
  ANIMATION	
  
Property	
  Anima-on	
  
•  Extend	
  anima-on	
  beyond	
  Views!	
  
   –  Also	
  limited	
  scope:	
  move,	
  rotate,	
  scale,	
  alpha.	
  
      That’s	
  it.	
  
•  With	
  Property	
  Anima-on,	
  you	
  can	
  animate	
  
     almost	
  anything	
  
•  Changes	
  the	
  object	
  itself	
  
•  Anima-ng	
  values	
  over	
  <me	
  
	
  
ValueAnimator	
  
•  To	
  animate	
  values	
  0.0	
  –	
  1.0	
  
    –  ValueAnimator anim = ValueAnimator.ofInt(0, 100);
    –  anim.setDuration(500);
    –  anim.start();
•  It	
  animates,	
  but	
  nothing	
  can	
  be	
  seen.	
  Add	
  listener!	
  
    –    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    –            public void onAnimationUpdate(ValueAnimator animation) {
    –                int value = (Integer) animation.getAnimatedValue();
    –                // do something with value...
    –            }
    –        });
ObjectAnimator:	
  animate	
  objects!	
  
MyPoint myobject = new MyPoint(0,0);

// Animate myobject’s x-attribute from default value
// to 20!
ObjectAnimator anim2 =
    ObjectAnimator.ofInt(myobject, "x", 20);
anim2.setDuration(2500);
anim2.start();
                              Assumes	
  that	
  myobject	
  
                             has	
  getX()	
  and	
  setX(int	
  x)	
  
                                       methods1	
  
View	
  class	
  in	
  Honeycomb	
  
•  In	
  Honeycomb,	
  View	
  class	
  has	
  several	
  set/get	
  
   methods..	
  For	
  example	
  
    –  setAlpha	
  (float	
  alpha)	
  
    –  float	
  getAlpha	
  ()	
  
•  So	
  by	
  using	
  Object	
  Animator,	
  you	
  can	
  animate	
  
   the	
  alpha	
  (transparency)	
  for	
  every	
  view!	
  
Value/Object	
  Animator	
  Methods	
  
•    setStartDelay(long)
•    setRepeatCount(int)
•    setRepeatMode(int)
•    setInterPolator(TimeInterpolator)
Example	
  anima-ng	
  View	
  
// Getting reference to TextView defined in xml
tv = (TextView) findViewById(R.id.textview1);
ObjectAnimator anim =
     ObjectAnimator.ofFloat(tv, "alpha", 0);

anim.setDuration(1000);
anim.setRepeatCount(ObjectAnimator.INFINITE);
anim.setRepeatMode(ObjectAnimator.REVERSE);
anim.start();
Android 2D Drawing and Animation Framework
AnimatorSet	
  
•  Choreograph	
  mul-ple	
  anima-ons	
  
•  Play	
  several	
  anima-ons	
  together	
  
   –  playTogether(Animator…)	
  
•  Play	
  anima-ons	
  one	
  ader	
  another	
  
   –  playSequen-ally(Animator…)	
  
•  Or	
  combina-on	
  of	
  above	
  
   –  with(),	
  before(),	
  ader()	
  methods	
  
Android 2D Drawing and Animation Framework
Android 2D Drawing and Animation Framework

More Related Content

PDF
Android Vector Drawable
PDF
Android graphics
PPTX
HTML 5_Canvas
PDF
Canvas - HTML 5
PPT
PDF
D3 Basic Tutorial
PPTX
HTML CANVAS
PDF
SVG - Scalable Vector Graphics
Android Vector Drawable
Android graphics
HTML 5_Canvas
Canvas - HTML 5
D3 Basic Tutorial
HTML CANVAS
SVG - Scalable Vector Graphics

What's hot (18)

PPTX
HTML5 and SVG
PPTX
SVG, CSS3, and D3 for Beginners
PPTX
SVG - Scalable Vector Graphic
PPTX
SVGD3Angular2React
PPTX
HTML5 Animation in Mobile Web Games
KEY
Interactive Graphics
PDF
Илья Пухальский (EPAM Systems)
PDF
Building Mosaics
PPTX
Advanced html5 diving into the canvas tag
PDF
Graphicsand animations devoxx2010 (1)
PPTX
Android UI Tips & Tricks
PDF
Android custom views
PDF
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
PDF
D3 data visualization
PDF
Enhancing UI/UX using Java animations
PDF
Mpdf51demo
PPTX
Intro to Canva
PDF
Learn D3.js in 90 minutes
HTML5 and SVG
SVG, CSS3, and D3 for Beginners
SVG - Scalable Vector Graphic
SVGD3Angular2React
HTML5 Animation in Mobile Web Games
Interactive Graphics
Илья Пухальский (EPAM Systems)
Building Mosaics
Advanced html5 diving into the canvas tag
Graphicsand animations devoxx2010 (1)
Android UI Tips & Tricks
Android custom views
Th 0230 turbo_chargeyourui-howtomakeyourandroidu_ifastandefficient
D3 data visualization
Enhancing UI/UX using Java animations
Mpdf51demo
Intro to Canva
Learn D3.js in 90 minutes
Ad

Viewers also liked (20)

PDF
Android Vector drawable
PDF
Революционный Android. Ищем замену фрагментам
PDF
Vector Drawable API. Возможности применения
PDF
Android Http Connection and SAX Parsing
PPTX
Qt Translations
PDF
Responsive Web Site Design
PDF
C# for Java Developers
PDF
Android Essential Tools
PDF
Android Security, Signing and Publishing
PDF
Quick Intro to Android Development
PDF
Building Web Services
PDF
Android Wi-Fi Manager and Bluetooth Connection
PDF
00 introduction-mobile-programming-course.ppt
PDF
Android UI Development
PDF
Android Location and Maps
PDF
Android Threading
PDF
Android Data Persistence
PDF
Android Sensors
PDF
Android Multimedia Support
PDF
Android Telephony Manager and SMS
Android Vector drawable
Революционный Android. Ищем замену фрагментам
Vector Drawable API. Возможности применения
Android Http Connection and SAX Parsing
Qt Translations
Responsive Web Site Design
C# for Java Developers
Android Essential Tools
Android Security, Signing and Publishing
Quick Intro to Android Development
Building Web Services
Android Wi-Fi Manager and Bluetooth Connection
00 introduction-mobile-programming-course.ppt
Android UI Development
Android Location and Maps
Android Threading
Android Data Persistence
Android Sensors
Android Multimedia Support
Android Telephony Manager and SMS
Ad

Similar to Android 2D Drawing and Animation Framework (20)

PPT
MD-VII-CH-ppt (1).ppt mobile development
PDF
Ch4 creating user interfaces
DOCX
Android view animation in android-chapter18
PDF
[Android] 2D Graphics
PPTX
Fernando F. Gallego - Efficient Android Resources 101
PDF
Make your designers love (working with) you
PDF
Android Application Development - Level 1
PPTX
It's the arts! Playing around with the Android canvas
PPTX
03 layouts & ui design - Android
PPTX
Android Custom views
PDF
1.static int HORIZONTAL_WRAP2. Container view controllers are most.pdf
PPT
Android UI
PPT
Android Ui
PDF
Android 3.0 Portland Java User Group 2011-03-15
PPTX
Making it fit - DroidCon Paris 18 june 2013
PPT
Deep Dive Xamarin.Android
PDF
Android design and Custom views
PPTX
Basic Android Animation
PDF
Custom View
PPT
Getting the Magic on Android Tablets
MD-VII-CH-ppt (1).ppt mobile development
Ch4 creating user interfaces
Android view animation in android-chapter18
[Android] 2D Graphics
Fernando F. Gallego - Efficient Android Resources 101
Make your designers love (working with) you
Android Application Development - Level 1
It's the arts! Playing around with the Android canvas
03 layouts & ui design - Android
Android Custom views
1.static int HORIZONTAL_WRAP2. Container view controllers are most.pdf
Android UI
Android Ui
Android 3.0 Portland Java User Group 2011-03-15
Making it fit - DroidCon Paris 18 june 2013
Deep Dive Xamarin.Android
Android design and Custom views
Basic Android Animation
Custom View
Getting the Magic on Android Tablets

More from Jussi Pohjolainen (20)

PDF
Moved to Speakerdeck
PDF
Java Web Services
PDF
Box2D and libGDX
PDF
libGDX: Screens, Fonts and Preferences
PDF
libGDX: Tiled Maps
PDF
libGDX: User Input and Frame by Frame Animation
PDF
Intro to Building Android Games using libGDX
PDF
Advanced JavaScript Development
PDF
Introduction to JavaScript
PDF
Introduction to AngularJS
PDF
libGDX: Scene2D
PDF
libGDX: Simple Frame Animation
PDF
libGDX: Simple Frame Animation
PDF
libGDX: User Input
PDF
Implementing a Simple Game using libGDX
PDF
Building Android games using LibGDX
PDF
Creating Asha Games: Game Pausing, Orientation, Sensors and Gestures
PDF
Creating Games for Asha - platform
PDF
Intro to Asha UI
PDF
Intro to Java ME and Asha Platform
Moved to Speakerdeck
Java Web Services
Box2D and libGDX
libGDX: Screens, Fonts and Preferences
libGDX: Tiled Maps
libGDX: User Input and Frame by Frame Animation
Intro to Building Android Games using libGDX
Advanced JavaScript Development
Introduction to JavaScript
Introduction to AngularJS
libGDX: Scene2D
libGDX: Simple Frame Animation
libGDX: Simple Frame Animation
libGDX: User Input
Implementing a Simple Game using libGDX
Building Android games using LibGDX
Creating Asha Games: Game Pausing, Orientation, Sensors and Gestures
Creating Games for Asha - platform
Intro to Asha UI
Intro to Java ME and Asha Platform

Recently uploaded (20)

PDF
Electronic commerce courselecture one. Pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
cuic standard and advanced reporting.pdf
PDF
KodekX | Application Modernization Development
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Electronic commerce courselecture one. Pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
NewMind AI Monthly Chronicles - July 2025
cuic standard and advanced reporting.pdf
KodekX | Application Modernization Development
Dropbox Q2 2025 Financial Results & Investor Presentation
Unlocking AI with Model Context Protocol (MCP)
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation_ Review paper, used for researhc scholars
Agricultural_Statistics_at_a_Glance_2022_0.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
The AUB Centre for AI in Media Proposal.docx
Review of recent advances in non-invasive hemoglobin estimation
Bridging biosciences and deep learning for revolutionary discoveries: a compr...

Android 2D Drawing and Animation Framework

  • 1. Android  Drawing  and  Anima-on   Jussi  Pohjolainen   Tampere  University  of  Applied  Sciences  
  • 2. Android  Graphics   •  Custom  2D  Graphics   –  android.graphics.drawable  package   •  OpenGL  ES  1.0  high  performance  3D  graphics   –  javax.microedition.khronos.opengles   package   •  In  this  lecture,  we  will  concentrate  on  the  2D   graphics  
  • 4. Drawables   •  A  Drawable  is  a  general  abstrac-on  for   “something  that  can  be  drawn”   –  BitmapDrawable, ShapeDrawable, LayerDrawable … •  How  to  define  and  instan-ate  Drawable?   1.  Use  image  saved  to  project  resources   2.  XML  file  that  defines  drawable  proper-es   3.  In  Java  
  • 5. 1.  Use  image  saved  to  project  resources   •  Supported  types:  PNG  (preferred),  JPG   (acceptable)  and  GIF  (discoured)   •  Add  the  file  to  res/drawable   •  Refer  using  the  R  –  class   •  Use  it  from  Java  or  XML    
  • 6. Save  Image  to  Project  
  • 7. Screen  Sizes   •  Android  supports  different  screen  sizes   •  Simplifying  developer’s  work:   –  4  generalized  sizes:  small,  normal,  large,  xlarge   –  4  generalized  densi-es:  ldpi,  mdpi,  hdpi,  xhdpi    
  • 8. Emulators  for  different  Screen  Sizes  
  • 9. Resources   res/layout/my_layout.xml            // layout for normal screen size res/layout-small/my_layout.xml      // layout for small screen size res/layout-large/my_layout.xml      // layout for large screen size res/layout-large-land/my_layout.xml // layout for large screen size in landscape mode res/layout-xlarge/my_layout.xml     // layout for extra large screen size res/drawable-lhdpi/my_icon.png      // image for low density res/drawable-mdpi/my_icon.png   // image for medium density res/drawable-hdpi/my_icon.png       // image for high density res/drawable-nodpi/composite.xml    // density independent resource
  • 10. Displaying  Image  using  Java   public class DrawingExamples extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context mContext = getApplicationContext(); Resources res = mContext.getResources(); Drawable drawable = res.getDrawable(R.drawable.androidlogo); ImageView imageview = new ImageView(this); imageview.setImageDrawable(drawable); setContentView(imageview); } }
  • 11. Easier  way   public class DrawingExamples extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageView imageview = new ImageView(this); imageview.setImageResource(R.drawable.androidlogo); setContentView(imageview); } }
  • 12. Or  use  it  via  the  XML   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/ res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent”> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/androidlogo" /> </LinearLayout>
  • 14. Drawing  on  a  View   •  If  no  significant  frame-­‐rate  speed  needed,   draw  to  custom  View •  Extend  View  and  define  onDraw  –  method   •  onDraw() is  called  automa-cally   •  Redraw:  invalidate() •  Inside  onDraw(),  Canvas  is  given  
  • 15. Simple  2D  Drawing:  View   public class CustomDrawableView extends View { public CustomDrawableView(Context context, AttributeSet attr) { super(context, attr); } protected void onDraw(Canvas canvas) { // Paint class holds style information Paint myPaint = new Paint(); myPaint.setStrokeWidth(3); myPaint.setColor(0xFF097286); canvas.drawCircle(200, 200, 50, myPaint); invalidate(); } }
  • 16. Simple  2D  Drawing:  View   <fi.tamk.CustomDrawableView android:layout_width="fill_parent" android:layout_height="wrap_content" />
  • 17. ShapeDrawable •  With  ShapeDrawable,  one  can  draw  primi-ve   2D  shapes   –  ArcShape, OvalShape, RoundRectShape, PathShape, RectShape •  ShapeDrawable  takes  Shape  object  and   manages  it  into  screen   •  Shapes  can  be  defined  in  XML  
  • 18. Shape  Drawable  in  Java   // Drawing primitive 2D shapes public class CustomDrawableView extends View {     private ShapeDrawable mDrawable;     public CustomDrawableView(Context context) {         super(context);         int x = 10;         int y = 10;         int width = 300;         int height = 50;         mDrawable = new ShapeDrawable(new OvalShape());         mDrawable.getPaint().setColor(0xff74AC23);         mDrawable.setBounds(x, y, x + width, y + height);     }     protected void onDraw(Canvas canvas) {         mDrawable.draw(canvas);     } }
  • 19. Shape  Drawable  in  XML   // res/drawable-xxx/myshapes.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <gradient android:angle="90" android:startColor="#ffffff" android:endColor="#ff0000" android:type="linear" /> <size android:width="60dp" android:height="40dp" /> </shape>
  • 20. Shape  Drawable  in  XML   // res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/myshapes" /> </LinearLayout>
  • 23. About  Anima-on   –  1)  View  Anima<on   •  Any  View  object  to  perform  tweened  anima-on  and  frame   by  frame  anima-on   •  Tween  anima-on  calculates  anima-on  given  informa-on:   start,  end,  size,  rota-on  and  other   •  Frame  by  frame:  series  of  drawables  one  ader  another   –  2)  Property  Anima<on  System  (Android  3.x)   •  “Animate  almost  anything”   •  Define  anima-on  to  change  any  object  property  over  -me,   whether  in  screen  or  not    
  • 24. Differences   •  View   +  Less  -me  to  setup   +  Less  code  to  write   -­‐  Only  View  objects   -­‐  Only  certain  aspects  to  animate  (scaling,  rota-ng..)   -­‐  View  itself  is  not  modified  when  anima-ng   •  Property  anima<on  system   +  Anima-ng  also  non  View  objects   +  Anima-ng  any  property  of  any  object   -­‐  More  work  
  • 26. About  View  Anima-on   •  View  anima-on  can  be  1)  tween  or  2)  frame  by   frame  anima-on   •  Tween  anima-on   –  Can  perform  series  of  simple  transforma-ons   (posi-on,  size,  rota-on,  transparency)  on  View  object   –  In  XML  or  in  code   •  Frame  anima-on   –  Sequence  of  different  images   –  In  XML  or  in  code  
  • 27. 1)  Tween  anima-on   •  Preferred  way:  Define  in  XML   •  Anima-on  xml  is  stored  in  res/anim  directory   •  Root  element  can  be:  alpha,  scale,  translate,   rotate  or  set  that  holds  groups  of  these   elements  
  • 28. Tween  Anima-on:  XML   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"     android:interpolator="@[package:]anim/interpolator_resource"     android:shareInterpolator=["true" | "false"] >     <alpha         android:fromAlpha="float"         android:toAlpha="float" />     <scale         android:fromXScale="float"         android:toXScale="float"         android:fromYScale="float"         android:toYScale="float"         android:pivotX="float"         android:pivotY="float" />     <translate         android:fromXDelta="float"         android:toXDelta="float"         android:fromYDelta="float"         android:toYDelta="float" />     <rotate         android:fromDegrees="float"         android:toDegrees="float"         android:pivotX="float"         android:pivotY="float" />     <set>         ...     </set> </set>
  • 29. Tween  Anima-on:  Java   TextView v = (TextView) findViewById(R.id.textview1); Animation myanimation = AnimationUtils.loadAnimation(this, R.anim.myanimation); v.startAnimation(myanimation);
  • 30. Basic  Defini-ons   •  <alpha> –  fade-­‐in  or  fade-­‐out  anima-ons.     •  <scale> –  Resizing  anima-on.     •  <translate> –  Ver-cal  and  or  horizontal  movement.   •  <rotate> –  A  rota-on  of  an  anima-on  
  • 31. Example  of  Translate   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="100%p" android:duration="700" android:repeatMode="reverse" android:repeatCount="1" /> </set> Start  from  0,0   End  to  0,  100%  from  parent   Dura-on  is  700   Repeat  in  reverse  one  -me  
  • 33. Scale   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <scale android:fromXScale="1" android:fromYScale="1" android:toXScale="6" android:toYScale="6" android:duration="700" android:repeatMode="reverse" android:repeatCount="1" /> </set>
  • 35. Rotate   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="700" /> </set>
  • 37. Alpha   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/ android" android:shareInterpolator="false"> <alpha android:fromAlpha = "1" android:toAlpha = "0" android:duration = "1000" android:repeatMode = "reverse" android:repeatCount= "1" /> </set>
  • 39. Using  Several  Anima-ons   <?xml  version="1.0"  encoding="um-­‐8"?>   <scale <set  xmlns:android="hpp://schemas.android.com/apk/res/ android:fromXScale = "1" android"   android:fromYScale = "1"          android:shareInterpolator="false">             android:toXScale = "6"                        <alpha   android:toYScale = "6"              android:fromAlpha    =  "1"   android:pivotX = "50%"              android:toAlpha        =  "0"   android:pivotY = "50%"              android:dura-on      =  "1000"   android:duration = "1000"              android:repeatMode  =  "reverse"   android:repeatMode = "reverse"              android:repeatCount=  "1"  />   android:repeatCount = "1" />                  <rotate   </set>              android:fromDegrees  =  "0"                android:toDegrees      =  "360"                android:pivotX            =  "50%"                android:pivotY            =  "50%"                android:dura-on        =  "1000"                  android:repeatMode    =  "reverse"                android:repeatCount  =  "1"  />  
  • 41. Interpola-on   •  Interpola-on  is  an  anima-on  modifier  defined   in  xml   •  Rate  of  change  in  anima-on   –  Accelerate,  decelerate,  bounce…  
  • 42. Example  of  Interpola-on   <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true" android:interpolator="@android:anim/bounce_interpolator" > <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="100%p" android:duration="700" /> </set>
  • 45. 2)  Frame  Anima-on   •  Create  XML  file  that  consists  of  sequence  of   different  images   •  Root-­‐element:  <anima-on-­‐list>  and  series  of   child  elements  <item>    
  • 46. Example   <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/ android" android:oneshot="false"> <item android:drawable="@drawable/a1" android:duration="200" /> <item android:drawable="@drawable/a2" android:duration="200" /> <item android:drawable="@drawable/a3" android:duration="200" /> <item android:drawable="@drawable/a4" android:duration="200" /> <item android:drawable="@drawable/a5" android:duration="200" /> <item android:drawable="@drawable/a6" android:duration="200" /> <item android:drawable="@drawable/a7" android:duration="200" /> <item android:drawable="@drawable/a8" android:duration="200" /> </animation-list>
  • 47. Star-ng  the  Frame  Anima-on   ImageView player = (ImageView) findViewById(R.id.player); player.setImageResource(R.drawable.frameanimation); AnimationDrawable anim = (AnimationDrawable) player.getDrawable(); anim.start();
  • 49. Property  Anima-on   •  Extend  anima-on  beyond  Views!   –  Also  limited  scope:  move,  rotate,  scale,  alpha.   That’s  it.   •  With  Property  Anima-on,  you  can  animate   almost  anything   •  Changes  the  object  itself   •  Anima-ng  values  over  <me    
  • 50. ValueAnimator   •  To  animate  values  0.0  –  1.0   –  ValueAnimator anim = ValueAnimator.ofInt(0, 100); –  anim.setDuration(500); –  anim.start(); •  It  animates,  but  nothing  can  be  seen.  Add  listener!   –  anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { –          public void onAnimationUpdate(ValueAnimator animation) { –              int value = (Integer) animation.getAnimatedValue(); –              // do something with value... –          } –      });
  • 51. ObjectAnimator:  animate  objects!   MyPoint myobject = new MyPoint(0,0); // Animate myobject’s x-attribute from default value // to 20! ObjectAnimator anim2 = ObjectAnimator.ofInt(myobject, "x", 20); anim2.setDuration(2500); anim2.start(); Assumes  that  myobject   has  getX()  and  setX(int  x)   methods1  
  • 52. View  class  in  Honeycomb   •  In  Honeycomb,  View  class  has  several  set/get   methods..  For  example   –  setAlpha  (float  alpha)   –  float  getAlpha  ()   •  So  by  using  Object  Animator,  you  can  animate   the  alpha  (transparency)  for  every  view!  
  • 53. Value/Object  Animator  Methods   •  setStartDelay(long) •  setRepeatCount(int) •  setRepeatMode(int) •  setInterPolator(TimeInterpolator)
  • 54. Example  anima-ng  View   // Getting reference to TextView defined in xml tv = (TextView) findViewById(R.id.textview1); ObjectAnimator anim = ObjectAnimator.ofFloat(tv, "alpha", 0); anim.setDuration(1000); anim.setRepeatCount(ObjectAnimator.INFINITE); anim.setRepeatMode(ObjectAnimator.REVERSE); anim.start();
  • 56. AnimatorSet   •  Choreograph  mul-ple  anima-ons   •  Play  several  anima-ons  together   –  playTogether(Animator…)   •  Play  anima-ons  one  ader  another   –  playSequen-ally(Animator…)   •  Or  combina-on  of  above   –  with(),  before(),  ader()  methods