3

私はかなり長い間これに困惑しています。FrameLayout に含まれているフラグメントを右に移動しようとしています。これにより、フラグメントの左 20% のみが表示されます。

私が遭遇していると思う問題は、親がフラグメントをその境界の外に移動させないか、移動する方法がわからないことです。私が試したことはすべて、フラグメントを右の壁に押し付け、フラグメントをスケーリングしてフィットさせただけです。フラグメントを右の壁の外に押し出す必要があります。どんな助けでも大歓迎です。

私が達成しようとしている最後の効果は、プットオンを押すとフラグメントが完全なビューに変換され、ボタンを押すと 20% のビューに変換されることです。アニメーションをすべて設定しましたが、フラグメントの実際の移動だけで困惑しています。

4

1 に答える 1

2

これは、アニメーション化されていますが、フラグメント自体がアニメーションによって表示される場所にあるという意味ではありません。物理的に移動するまで、元の位置で 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);
         }
       });
    }
  }

あなたの場合、deltaX20%の効果(おそらくコンテナの幅の倍、またはそれらの線に沿った何か)を達成するための適切な値0.2f、または完全なフラグメントが表示されるべきときにその効果を元に戻すための適切な値になります。

私の回答には、ネイティブ API レベル 11 アニメーター用と、アニメーター フレームワークの NineOldAndroids バックポートを使用するための完全なサンプル プロジェクトへのリンクが含まれています。

于 2012-10-11T23:26:34.180 に答える