私は、AccelerateDecelerateInterpolatorを使用してそれをカスタムしようとしています。 DecelerateInterpolatorのようなインターポレーターには「因子」フィールドがあるので、その振る舞いを変えることができます。 AccelerateDecelerateInterpolatorにはありません。 私がAccelerateDecelerateInterpolatorを使用しているとき、私は補間器が何かをしていることに気づくことさえほとんどありません。アニメーションは非常に線形に見えます。ですから、AccelerateDecelerateInterpolatorを因数分解したり、それを変更する方法はありますか? ありがとうカスタムアンドロイドAccelerateDecelerateInterpolator
10
A
答えて
9
あなた自身のInterpolator
で標準的なイージング機能を実装できます。 例えば、これはeaseInOutQuint
の実装次のようになります。
public class MVAccelerateDecelerateInterpolator implements Interpolator {
// easeInOutQuint
public float getInterpolation(float t) {
float x = t*2.0f;
if (t<0.5f) return 0.5f*x*x*x*x*x;
x = (t-0.5f)*2-1;
return 0.5f*x*x*x*x*x+1;
}
}
1
独自のTimeInterpolatorをカスタムAccelerateDecelerateInterpolatorとして定義しようとしました。私は結果に満足しているわけではありませんが、いくつかのアイデアを与えるかもしれません。コードには、0.05fという要素も含まれています。それをチェックアウト:
TimeInterpolator interpolator = new TimeInterpolator() {
@Override
public float getInterpolation(float input) {
return input + 0.05f * (float) Math.sin(2 * Math.PI * input);
}
};
ここでは洗練された解決策です。接線はおそらく正弦よりも仕事にとって優れた関数です。このソリューションは、最初と最後に加速します。また、加速度を決定する要因もあります。
TimeInterpolator interpolator = new TimeInterpolator() {
private final float mFactor = 1.1f; // less than pi/2
private float oldRetVal;
private float oldInputVal;
private double initValue = Math.tan(-mFactor);
private double endValue = 2 * Math.tan(mFactor);
@Override
public float getInterpolation(float input) {
if (oldInputVal != input) {
oldInputVal = input;
oldRetVal = (float) ((Math.tan(mFactor * (2 * input - 1)) - initValue)/endValue);
}
return oldRetVal;
}
};
1
のAndroidは、v4のサポートライブラリにPathInterpolatorCompatを追加しました。これで、https://gist.github.com/ebabel/8ff41cad01e9ce1dd9ceを使用すると、easeInOutQuint、easeInOutQuart、またはeaseInOutExpoを簡単に指定できます。
public static void expand(final View v) {
v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
final int targetHeight = v.getMeasuredHeight();
if (v.getHeight() != targetHeight) {
// Older versions of android (pre API 21) cancel animations for views with a height of 0 so use 1 instead.
v.getLayoutParams().height = 1;
v.setVisibility(View.VISIBLE);
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
v.getLayoutParams().height = interpolatedTime == 1
? ViewGroup.LayoutParams.WRAP_CONTENT
: (int) (targetHeight * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
a.setInterpolator(EasingsConstants.easeInOutQuart);
a.setDuration(computeDurationFromHeight(v));
v.startAnimation(a);
} else {
Log.d("AnimationUtil", "expand Already expanded ");
}
}
/**
* 1dp/ms * multiplier
*/
private static int computeDurationFromHeight(View v) {
return (int) (v.getMeasuredHeight()/v.getContext().getResources().getDisplayMetrics().density) * DURATION_MULTIPLIER;
}
そして、あなたのbuild.gradleを忘れないでください:
compile "com.android.support:support-v4:22.2.0"
+0
この男からコピーされた方法を拡張:http://stackoverflow.com/a/13381228/247325 –
関連する問題
- 1. ウィジェットでカスタムアンドロイドのアナログ時計
- 2. 作るカスタムアンドロイドSurfaceView透明
- 3. AccelerateDecelerateInterpolatorを使用してImageViewが1回だけ回転する
- 4. 入力時にカスタムアンドロイド設定タイプのフォーカスが失われます
- 5. typescriptを使用したnativescriptでのカスタムアンドロイド表示
- 6. カスタムアンドロイドROM用のアプリを構築するために、修正またはカスタムのアンドロイドSDKを作成するにはどうすればよいですか?
- 7. フォーカスが変更されたときに完全な編集テキストの不透明度を変更します
- 8. Androidのプロパティのアニメーション:どのように表示の高さを増やすには?
- 9. ボタンをクリックしてアニメーションを停止する
- 10. は
- 11. AnimationSet setInterpolator()が働いていませんwow 9oldandroids libを使用しています
- 12. Androidのスライドは、残された空間は、SDK 2.3</p> <p>を使用して、他のビューで
- 13. キーボードが表示された後にはじめて表示される
- 14. アンドロイドのjava.lang.NullPointerException:私はCubeLayoutクラスで<br> <a href="https://github.com/justomiguel/AndroidCubeDemo" rel="nofollow">Android Cube Demo</a></p> <p>を使用していインタフェースメソッド
- 15. application.onCreate()でBroadcastIntentを送信すると永遠に起動します
- 16. 起動時にAdMobがクラッシュする
- 17. エラー:シンボルクラスを見つけることができませんコンパイル
- 18. Android - AdMobバナークラッシュApp
- 19. Androidで全体の画面を見て - キャンバスに表示の限界を守る方法を教えてください。
- 20. ActivityGroup内のActivity内のviewpagerでviewpagerのPull to Refreshグリッドビューを使用するとClassCastExceptionが発生する
- 21. AndroidでCircularRealとCircularRevealLibraryの問題
FYI、関数easeInOutQuintはeasings.netで見つけることができます。 –