Подтвердить что ты не робот

Материал Android L-интерполятор изображений

Это скорее вопрос математики, чем программирование.

Хорошо, я хотел бы спросить id, что вы знаете, что такое интерполятор, описанный в Material Design:

enter image description here

Он выглядит как AccelerateDecelerateInterpolator, но эффект замедления замедляется медленнее.

Мой лучший люк:

public class MaterialInterpolator implements Interpolator {

    @Override
    public float getInterpolation(float input) {
        if(input<1./3f)
            return new AccelerateInterpolator().getInterpolation(input);
        else
            return new DecelerateInterpolator().getInterpolation(input);
    }

}

Это создает разрыв между значениями:

Time / Value
...
0.3,0.09
0.317,0.100489
0.333,0.110889  <-- gap
0.35,0.57750005
0.367,0.599311
0.383,0.61931103
0.4,0.64
...

Замедление AccelerateDecelerateInterpolator:

output = accelerateDecelerateInterpolator(decelerateInterpolator(input));

private float accelerateDecelerateInterpolator(float input) {
    return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}

private float decelerateInterpolator(float input) {
    //  return 1.0f - (1.0f - input) * (1.0f - input);
    return  (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor));  // default factor =1.f
}

Дает ставки, похожие на:

enter image description here

И кривая стоимости/времени:

enter image description here

не уверен, что в начале это ошибка вывода или фактическое поведение должно быть ошибкой вывода


Источник: http://www.google.com/design/spec/patterns/imagery-treatment.html

4b9b3361

Ответ 1

В библиотеке поддержки теперь есть интерполяторы для устройств с предварительным Lollipop: FastOutLinearInInterpolator, FastOutSlowInInterpolator, LinearOutSlowInInterpolator и PathInterpolatorCompat.

Docs: http://developer.android.com/reference/android/support/v4/view/animation/package-summary.html

Источник: https://github.com/android/platform_frameworks_support/tree/master/v4/java/android/support/v4/view/animation

Ответ 2

Эти сюжеты очень похожи на графики x*(a*x+b)^2. С ограничениями на то, что второй корень равен 1, он похож на a*x*(x-1)^2. Интегрировав его, выберите a, чтобы результат был равен 1 на x=1 и получил 3*x^4-8*x^3+6*x^2.

Код:

public class MaterialInterpolator implements Interpolator {

    @Override
    public float getInterpolation(float x) {
        return (float) (6 * Math.pow(x, 2) - 8 * Math.pow(x, 3) + 3 * Math.pow(x, 4));
    }
}

Ответ 3

Android 5 теперь предоставляет интерполяторы для трех основных кривых в спецификации материала:

 * @android:interpolator/fast_out_linear_in
 * @android:interpolator/fast_out_slow_in
 * @android:interpolator/linear_out_slow_in

Вы, скорее всего, хотите использовать интерполятор fast_out_slow_in.

Ответ 4

Здесь вы можете найти источник fast_out_slow_in.xml интерполятор здесь, если вы хотите использовать их на Android до 5.0.

<?xml version="1.0" encoding="utf-8"?> <pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:controlX1="0.4" android:controlY1="0" android:controlX2="0.2" android:controlY2="1"/>