これは、アニメーション化されていますが、フラグメント自体がアニメーションによって表示される場所にあるという意味ではありません。物理的に移動するまで、元の位置で OnClick イベントを受け取ります。
TranslateAnimation
永続的な効果ではなく、一時的な効果のために設計された古いスタイルのアニメーション ( など) を使用している可能性があります。
関連する私の質問を指摘した理由は、私自身のソリューションを含む多くのソリューションが、効果が長持ちするように設計された新しいアニメーター フレームワークを使用しているからです。
また、その例は私には役に立ちません。端に押し付けるだけでなく、部分的に画面外に移動しようとしています。
特にアニメーターのフレームワークに関しては、「部分的に画面外に移動する」と「端に押し付ける」の間に実質的な違いはありません。たとえば、私のソリューションを読んだことがあればtranslateWidgets()
、一連のウィジェットの水平方向のスライドを示すメソッドを見たことがあるでしょう。
private void translateWidgets(int deltaX, View... views) {
for (final View v : views) {
v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
v.animate().translationXBy(deltaX).setDuration(ANIM_DURATION)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
v.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
}
}
あなたの場合、deltaX
20%の効果(おそらくコンテナの幅の倍、またはそれらの線に沿った何か)を達成するための適切な値0.2f
、または完全なフラグメントが表示されるべきときにその効果を元に戻すための適切な値になります。
私の回答には、ネイティブ API レベル 11 アニメーター用と、アニメーター フレームワークの NineOldAndroids バックポートを使用するための完全なサンプル プロジェクトへのリンクが含まれています。