android - AppCompat v22: Reference new interpolators via XML -


i've been trying take advantage of new interpolators available in v22 of support library (fastoutlinearin, etc). more specifically, i'd reference them via xml.

i tried using @android:interpolator/fast_out_linear_in lint tells me that's v21+ version. tried digging around elsewhere , found nothing looked help.

i tried create custom interpolators this: (in my_linear_out_slow_in.xml)

<?xml version="1.0" encoding="utf-8"?> <linearoutslowininterpolator /> 

and

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.animation.linearoutslowininterpolator              xmlns:android="http://schemas.android.com/apk/res/android" /> 

but don't work in lollipop or prior versions: activity transitions no longer appear, leaving app in state old activity still visible unresponsive because, assume, new activity considered active isn't being rendered. before upgrade, when v21+ styles used new (non-compat) interpolators, worked fine.

unfortunately impossible use design support library's interpolators in xml. because of how animationutils handles creating interpolator.

taken gingerbread (api 9) source http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.2_r1/android/view/animation/animationutils.java?av=f

 private static interpolator createinterpolatorfromxml(context c, xmlpullparser parser)         throws xmlpullparserexception, ioexception {      interpolator interpolator = null;      // make sure on start tag.     int type;     int depth = parser.getdepth();      while (((type=parser.next()) != xmlpullparser.end_tag || parser.getdepth() > depth)            && type != xmlpullparser.end_document) {          if (type != xmlpullparser.start_tag) {             continue;         }          attributeset attrs = xml.asattributeset(parser);          string  name = parser.getname();           if (name.equals("linearinterpolator")) {             interpolator = new linearinterpolator(c, attrs);         } else if (name.equals("accelerateinterpolator")) {             interpolator = new accelerateinterpolator(c, attrs);         } else if (name.equals("decelerateinterpolator")) {             interpolator = new decelerateinterpolator(c, attrs);         }  else if (name.equals("acceleratedecelerateinterpolator")) {             interpolator = new acceleratedecelerateinterpolator(c, attrs);         }  else if (name.equals("cycleinterpolator")) {             interpolator = new cycleinterpolator(c, attrs);         } else if (name.equals("anticipateinterpolator")) {             interpolator = new anticipateinterpolator(c, attrs);         } else if (name.equals("overshootinterpolator")) {             interpolator = new overshootinterpolator(c, attrs);         } else if (name.equals("anticipateovershootinterpolator")) {             interpolator = new anticipateovershootinterpolator(c, attrs);         } else if (name.equals("bounceinterpolator")) {             interpolator = new bounceinterpolator(c, attrs);         } else {             throw new runtimeexception("unknown interpolator name: " + parser.getname());         }      }      return interpolator;  } 

they follow same codepath in lollipop new interpolator added, pathinterpolator, "base class" of new interpolators.

you can use new interpolators, need in versioned resource directory xml's. 1 work around create own "animationutils" mean including 1 more method + r.anim.* whenever find method accepts id animation.


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -