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
Post a Comment