Add support for naive text alignment. (#1067)

Fixes #388 
diff --git a/LottieSample/src/main/assets/Tests/Text_Justification_Translate_Scale_Rotation_Text.json b/LottieSample/src/main/assets/Tests/Text_Justification_Translate_Scale_Rotation_Text.json
new file mode 100644
index 0000000..ec3c080
--- /dev/null
+++ b/LottieSample/src/main/assets/Tests/Text_Justification_Translate_Scale_Rotation_Text.json
@@ -0,0 +1 @@
+{"v":"5.3.4","fr":30,"ip":0,"op":150,"w":1080,"h":640,"nm":"Text","ddd":0,"assets":[],"fonts":{"list":[{"fName":"ArialMT","fFamily":"Arial","fStyle":"Regular","ascent":71.5988159179688}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"right","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":149}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[540,400,0],"e":[640,400,0],"to":[16.6666660308838,0,0],"ti":[-16.6666660308838,0,0]},{"t":149}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[100,100,100],"e":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":75,"s":[200,200,100],"e":[100,100,100]},{"t":149}],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":40,"f":"ArialMT","t":"right","j":1,"tr":0,"lh":48,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":150,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"left","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":149}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[540,240,0],"e":[640,240,0],"to":[16.6666660308838,0,0],"ti":[-16.6666660308838,0,0]},{"t":149}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[100,100,100],"e":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":75,"s":[200,200,100],"e":[100,100,100]},{"t":149}],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":40,"f":"ArialMT","t":"left","j":0,"tr":0,"lh":48,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":150,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":5,"nm":"center","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":149}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[540,320,0],"e":[640,320,0],"to":[16.6666660308838,0,0],"ti":[-16.6666660308838,0,0]},{"t":149}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[100,100,100],"e":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":75,"s":[200,200,100],"e":[100,100,100]},{"t":149}],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":40,"f":"ArialMT","t":"center","j":2,"tr":0,"lh":48,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":150,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"c","size":40,"style":"Regular","w":50,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.311,-2.116],[3.45,0],[2.669,3.158],[0,6.966],[-2.767,3.174],[-4.427,0],[-2.068,-1.758],[-0.814,-3.483],[0,0],[3.58,2.849],[5.631,0],[3.792,-2.1],[1.855,-4.199],[0,-5.598],[-4.314,-4.639],[-7.097,0],[-3.89,3.369],[-0.945,5.957],[0,0]],"o":[[-2.312,2.116],[-4.297,0],[-2.67,-3.157],[0,-6.868],[2.766,-3.174],[2.93,0],[2.067,1.758],[0,0],[-1.009,-5.241],[-3.581,-2.848],[-4.46,0],[-3.793,2.1],[-1.855,4.199],[0,8.659],[4.313,4.639],[5.664,0],[3.889,-3.369],[0,0],[-0.619,4.395]],"v":[[36.035,-9.229],[27.393,-6.055],[16.943,-10.791],[12.939,-25.977],[17.09,-41.04],[27.881,-45.801],[35.376,-43.164],[39.697,-35.303],[48.242,-36.621],[41.357,-48.755],[27.539,-53.027],[15.161,-49.878],[6.689,-40.43],[3.906,-25.732],[10.376,-5.786],[27.49,1.172],[41.821,-3.882],[49.072,-17.871],[40.43,-18.994]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"c","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"e","size":40,"style":"Regular","w":55.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.278,-1.692],[3.223,0],[2.897,3.027],[0.325,5.697],[0,0],[0,0.521],[4.395,4.72],[6.934,0],[4.492,-4.817],[0,-8.723],[-4.443,-4.671],[-7.585,0],[-3.874,2.93],[-1.433,5.306],[0,0]],"o":[[-2.279,1.693],[-4.33,0],[-2.898,-3.027],[0,0],[0.032,-1.041],[0,-8.561],[-4.395,-4.72],[-7.162,0],[-4.492,4.818],[0,8.431],[4.443,4.671],[6.022,0],[3.873,-2.93],[0,0],[-1.335,3.711]],"v":[[36.67,-8.594],[28.418,-6.055],[17.578,-10.596],[12.744,-23.682],[51.416,-23.682],[51.465,-26.025],[44.873,-45.947],[27.881,-53.027],[10.4,-45.801],[3.662,-25.488],[10.327,-5.835],[28.369,1.172],[43.213,-3.223],[51.172,-15.576],[42.09,-16.699]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.751,2.702],[-4.037,0],[-2.8,-3.385],[-0.391,-4.362],[0,0]],"o":[[2.75,-2.702],[4.459,0],[1.823,2.181],[0,0],[0.293,-4.524]],"v":[[17.798,-41.748],[27.979,-45.801],[38.867,-40.723],[42.188,-30.908],[13.232,-30.908]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"e","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"n","size":40,"style":"Regular","w":55.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.718,2.377],[-3.744,0],[-1.742,-1.057],[-0.684,-1.774],[0,-3.58],[0,0],[0,0],[0,0],[0.325,1.628],[1.302,1.823],[2.62,1.123],[3.125,0],[3.809,-5.696],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-6.641],[2.718,-2.376],[2.344,0],[1.741,1.058],[0.684,1.775],[0,0],[0,0],[0,0],[0,-4.069],[-0.521,-2.506],[-1.302,-1.823],[-2.621,-1.123],[-7.195,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,0],[15.381,-28.32],[19.458,-41.846],[29.15,-45.41],[35.278,-43.823],[38.916,-39.575],[39.941,-31.543],[39.941,0],[48.73,0],[48.73,-31.885],[48.242,-40.43],[45.508,-46.924],[39.624,-51.343],[31.006,-53.027],[14.502,-44.482],[14.502,-51.855],[6.592,-51.855],[6.592,0]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"n","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"t","size":40,"style":"Regular","w":27.78,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.977,0],[0.7,0.423],[0.309,0.716],[0,2.507],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.716,-1.643],[-1.758,-1.009],[-3.191,0],[-2.474,0.52],[0,0]],"o":[[-1.302,0],[-0.7,-0.423],[-0.31,-0.716],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,5.273],[0.716,1.644],[1.758,1.009],[1.953,0],[0,0],[-1.595,0.228]],"v":[[21.924,-7.52],[18.921,-8.154],[17.407,-9.863],[16.943,-14.697],[16.943,-45.02],[25.781,-45.02],[25.781,-51.855],[16.943,-51.855],[16.943,-69.971],[8.203,-64.697],[8.203,-51.855],[1.758,-51.855],[1.758,-45.02],[8.203,-45.02],[8.203,-15.186],[9.277,-4.81],[12.988,-0.83],[20.41,0.684],[27.051,-0.098],[25.781,-7.861]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"t","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"r","size":40,"style":"Regular","w":33.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.977,3.125],[-1.53,1.156],[-1.921,0],[-2.148,-1.27],[0,0],[2.962,0],[1.709,-1.172],[2.018,-3.678],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-3.711],[0.651,-2.051],[1.53,-1.155],[2.148,0],[0,0],[-3.06,-1.888],[-2.051,0],[-1.709,1.172],[0,0],[0,0],[0,0],[0,0]],"v":[[15.283,0],[15.283,-27.148],[16.748,-37.402],[20.02,-42.212],[25.195,-43.945],[31.641,-42.041],[34.668,-50.195],[25.635,-53.027],[19.995,-51.27],[14.404,-43.994],[14.404,-51.855],[6.494,-51.855],[6.494,0]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"r","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"l","size":40,"style":"Regular","w":22.22,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.186,0],[15.186,-71.582],[6.396,-71.582],[6.396,0]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"l","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"f","size":40,"style":"Regular","w":25.98,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.107,1.14],[-2.67,0],[-1.823,-0.325],[0,0],[2.473,0],[2.132,-1.416],[0.846,-2.278],[0,-3.483],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-3.125],[1.106,-1.139],[1.627,0],[0,0],[-2.995,-0.586],[-3.841,0],[-2.132,1.416],[-0.619,1.693],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[17.432,0],[17.432,-45.02],[27.539,-45.02],[27.539,-51.855],[17.432,-51.855],[17.432,-56.641],[19.092,-63.037],[24.756,-64.746],[29.932,-64.258],[31.25,-71.924],[23.047,-72.803],[14.087,-70.679],[9.619,-65.137],[8.691,-57.373],[8.691,-51.855],[0.928,-51.855],[0.928,-45.02],[8.691,-45.02],[8.691,0]],"c":true},"ix":2},"nm":"f","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"f","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"i","size":40,"style":"Regular","w":22.22,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,-61.475],[15.43,-71.582],[6.641,-71.582],[6.641,-61.475]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,0],[15.43,-51.855],[6.641,-51.855],[6.641,0]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"i","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"g","size":40,"style":"Regular","w":55.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.809,-2.783],[-6.185,0],[-3.564,1.953],[-1.644,3.369],[0,8.073],[0,0],[0,0],[0,0],[6.12,0],[3.401,-2.278],[1.79,-4.182],[0,-4.948],[-3.906,-5.143],[-7.129,0],[-3.841,4.525],[0.455,-1.791],[2.213,-1.628],[4.069,0],[2.18,1.627],[0.358,2.637],[0,0]],"o":[[3.809,2.783],[5.208,0],[3.564,-1.953],[1.643,-3.369],[0,0],[0,0],[0,0],[-3.972,-4.948],[-4.59,0],[-3.402,2.279],[-1.791,4.183],[0,7.195],[3.906,5.144],[5.729,0],[0.032,5.73],[-0.781,2.93],[-2.214,1.627],[-3.777,0],[-1.628,-1.205],[0,0],[-0.13,5.598]],"v":[[10.498,16.87],[25.488,21.045],[38.647,18.115],[46.46,10.132],[48.926,-7.031],[48.926,-51.855],[40.82,-51.855],[40.82,-45.605],[25.684,-53.027],[13.696,-49.609],[5.908,-39.917],[3.223,-26.221],[9.082,-7.715],[25.635,0],[39.99,-6.787],[39.355,4.492],[34.863,11.328],[25.439,13.77],[16.504,11.328],[13.525,5.566],[4.98,4.297]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.734,3.174],[-3.906,0],[-2.816,-3.223],[0,-6.348],[2.734,-3.108],[4.036,0],[2.702,3.125],[0,6.804]],"o":[[2.734,-3.174],[3.971,0],[2.815,3.223],[0,6.641],[-2.734,3.109],[-4.07,0],[-2.702,-3.125],[0,-6.25]],"v":[[16.357,-40.991],[26.318,-45.752],[36.499,-40.918],[40.723,-26.562],[36.621,-11.938],[26.465,-7.275],[16.309,-11.963],[12.256,-26.855]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"g","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"},{"ch":"h","size":40,"style":"Regular","w":55.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.977,2.312],[-2.295,1.351],[-2.605,0],[-1.904,-2.002],[0,-4.395],[0,0],[0,0],[0,0],[1.221,2.67],[2.832,1.514],[3.841,0],[4.102,-4.752],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-4.069],[0.977,-2.311],[2.295,-1.35],[3.483,0],[1.904,2.002],[0,0],[0,0],[0,0],[0,-5.078],[-1.221,-2.669],[-2.832,-1.514],[-6.25,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,0],[15.381,-28.369],[16.846,-37.939],[21.753,-43.433],[29.102,-45.459],[37.183,-42.456],[40.039,-32.861],[40.039,0],[48.828,0],[48.828,-32.861],[46.997,-44.482],[40.918,-50.757],[30.908,-53.027],[15.381,-45.898],[15.381,-71.582],[6.592,-71.582],[6.592,0]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"h","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Arial"}]}
\ No newline at end of file
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/DocumentData.java b/lottie/src/main/java/com/airbnb/lottie/model/DocumentData.java
index e7b8b33..5281f74 100644
--- a/lottie/src/main/java/com/airbnb/lottie/model/DocumentData.java
+++ b/lottie/src/main/java/com/airbnb/lottie/model/DocumentData.java
@@ -1,17 +1,23 @@
 package com.airbnb.lottie.model;
 
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
 import androidx.annotation.ColorInt;
 import androidx.annotation.RestrictTo;
 
-import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-
 @RestrictTo(LIBRARY)
 public class DocumentData {
 
+  public enum Justification {
+    LeftAlign,
+    RightAlign,
+    Center
+  }
+
   public final String text;
   @SuppressWarnings("WeakerAccess") public final String fontName;
   public final double size;
-  @SuppressWarnings("WeakerAccess") final int justification;
+  @SuppressWarnings("WeakerAccess") public final Justification justification;
   public final int tracking;
   @SuppressWarnings("WeakerAccess") final double lineHeight;
   public final double baselineShift;
@@ -21,7 +27,7 @@
   public final boolean strokeOverFill;
 
 
-  public DocumentData(String text, String fontName, double size, int justification, int tracking,
+  public DocumentData(String text, String fontName, double size, Justification justification, int tracking,
       double lineHeight, double baselineShift, @ColorInt int color, @ColorInt int strokeColor,
       double strokeWidth, boolean strokeOverFill) {
     this.text = text;
@@ -43,7 +49,7 @@
     result = text.hashCode();
     result = 31 * result + fontName.hashCode();
     result = (int) (31 * result + size);
-    result = 31 * result + justification;
+    result = 31 * result + justification.ordinal();
     result = 31 * result + tracking;
     temp = Double.doubleToLongBits(lineHeight);
     result = 31 * result + (int) (temp ^ (temp >>> 32));
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java b/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
index 7e38207..1b2693f 100644
--- a/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
+++ b/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
@@ -17,6 +17,7 @@
 import com.airbnb.lottie.animation.keyframe.BaseKeyframeAnimation;
 import com.airbnb.lottie.animation.keyframe.TextKeyframeAnimation;
 import com.airbnb.lottie.model.DocumentData;
+import com.airbnb.lottie.model.DocumentData.Justification;
 import com.airbnb.lottie.model.Font;
 import com.airbnb.lottie.model.FontCharacter;
 import com.airbnb.lottie.model.animatable.AnimatableTextProperties;
@@ -64,7 +65,6 @@
       addAnimation(colorAnimation);
     }
 
-
     if (textProperties != null && textProperties.stroke != null) {
       strokeColorAnimation = textProperties.stroke.createAnimation();
       strokeColorAnimation.addUpdateListener(this);
@@ -138,9 +138,11 @@
       DocumentData documentData, Matrix parentMatrix, Font font, Canvas canvas) {
     float fontScale = (float) documentData.size / 100f;
     float parentScale = Utils.getScale(parentMatrix);
+
+    float totalTextWidth = getTotalTextWidthForGlyphs(documentData, font, fontScale, parentScale);
+    applyJustification(documentData.justification, canvas, totalTextWidth);
+
     String text = documentData.text;
-
-
     for (int i = 0; i < text.length(); i++) {
       char c = text.charAt(i);
       int characterHash = FontCharacter.hashFor(c, font.getFamily(), font.getStyle());
@@ -163,6 +165,7 @@
 
   private void drawTextWithFont(
       DocumentData documentData, Font font, Matrix parentMatrix, Canvas canvas) {
+    float fontScale = (float) documentData.size / 100f;
     float parentScale = Utils.getScale(parentMatrix);
     Typeface typeface = lottieDrawable.getTypeface(font.getFamily(), font.getStyle());
     if (typeface == null) {
@@ -177,6 +180,10 @@
     fillPaint.setTextSize((float) (documentData.size * Utils.dpScale()));
     strokePaint.setTypeface(fillPaint.getTypeface());
     strokePaint.setTextSize(fillPaint.getTextSize());
+
+    float totalTextWidth = fillPaint.measureText(text) * fontScale * Utils.dpScale() * parentScale;
+    applyJustification(documentData.justification, canvas, totalTextWidth);
+
     for (int i = 0; i < text.length(); i++) {
       char character = text.charAt(i);
       drawCharacterFromFont(character, documentData, canvas);
@@ -192,6 +199,35 @@
     }
   }
 
+  private float getTotalTextWidthForGlyphs(
+      DocumentData documentData, Font font, float fontScale, float parentScale) {
+    float totalWidth = 0;
+    for (int i = 0; i < documentData.text.length(); i++) {
+      char c = documentData.text.charAt(i);
+      int characterHash = FontCharacter.hashFor(c, font.getFamily(), font.getStyle());
+      FontCharacter character = composition.getCharacters().get(characterHash);
+      if (character == null) {
+        continue;
+      }
+      totalWidth += character.getWidth() * fontScale * Utils.dpScale() * parentScale;
+    }
+    return totalWidth;
+  }
+
+  private void applyJustification(Justification justification, Canvas canvas, float totalTextWidth) {
+    switch (justification) {
+      case LeftAlign:
+        // Do nothing. Default is left aligned.
+        break;
+      case RightAlign:
+        canvas.translate(-totalTextWidth, 0);
+        break;
+      case Center:
+        canvas.translate(-totalTextWidth / 2, 0);
+        break;
+    }
+  }
+
   private void drawCharacterAsGlyph(
       FontCharacter character,
       Matrix parentMatrix,
diff --git a/lottie/src/main/java/com/airbnb/lottie/parser/DocumentDataParser.java b/lottie/src/main/java/com/airbnb/lottie/parser/DocumentDataParser.java
index 9cdfaf6..86fdf4f 100644
--- a/lottie/src/main/java/com/airbnb/lottie/parser/DocumentDataParser.java
+++ b/lottie/src/main/java/com/airbnb/lottie/parser/DocumentDataParser.java
@@ -4,6 +4,7 @@
 
 import com.airbnb.lottie.model.DocumentData;
 
+import com.airbnb.lottie.model.DocumentData.Justification;
 import java.io.IOException;
 
 public class DocumentDataParser implements ValueParser<DocumentData> {
@@ -15,7 +16,7 @@
     String text = null;
     String fontName = null;
     double size = 0;
-    int justification = 0;
+    Justification justification = Justification.Center;
     int tracking = 0;
     double lineHeight = 0;
     double baselineShift = 0;
@@ -37,7 +38,12 @@
           size = reader.nextDouble();
           break;
         case "j":
-          justification = reader.nextInt();
+          int justificationInt = reader.nextInt();
+          if (justificationInt > Justification.Center.ordinal() || justificationInt < 0) {
+            justification = Justification.Center;
+          } else {
+            justification = Justification.values()[justificationInt];
+          }
           break;
         case "tr":
           tracking = reader.nextInt();