2

(このトピックは.setfillafter(true)に関するものではありません)。

私はアンドロイドのアニメーションに少し問題がありました、そして誰かがこれで私を助けてくれることを願っています。

リニアレイアウトとリストビューを作成しました。

他のlinearLayoutのtranslationYを同じ相対レイアウトに設定する必要があったため、listViewは相対レイアウトに配置されましたが、他のlinearlayoutは質問から除外されています。

リニアレイアウト(ボタンのように機能します)の誰かclicks or tapsが、リストビューを次の行で少し下向きにアニメーション化します。

animation_Fold = new TranslateAnimation(0, 0, 0, 150);
createNewAnimationListener(); //to monitor when the animation ends and starts.

animation_Fold.setDuration(300);
animation_Fold.setFillAfter(true);
listview_Contacts.startAnimation(animation_Fold); 

ご覧のとおり、アニメーションを作成すると、150(ピクセル?)下に移動します。

リストビューを元の位置にアニメーション化するためのコードがもう少しありますが、これはこの質問とは無関係だと思います。(実質的に同じですが、fromYDeltaとtoYDeltaが逆になります。)

アニメーション化した後でリストビューをクリックすると(どこをクリックしてもかまいません)、元の位置に戻ります。しかし、私は使用.setFillAfter(true)しました、それで、なぜこれが私に起こっているのですか?リストビューに新しい指定された位置を保持させたいだけだからです。(アニメーションの位置)

私はこれで立ち往生しているので、誰かが私のアニメーションを完成させるためにこれを手伝ってくれることを願っています。

4

2 に答える 2

1

さて、皆さんは私が自分自身と話していると思っているので、少し奇妙に感じます。私は自分の質問に答えたいと思います。しかし、いいえ、幸いなことにそうではありません。

つまり、要点です。

私は自分の問題を解決しましたが、これが解決するための方法ではないと思います。コメントで述べたようにAmokrane Chentir、リストビューを無効にすると、物理的な位置を設定する必要がないことがわかりました。これは、アニメーションが完了し、リストビューが無効になっているときにリストビューをクリックすると、リストビューが応答せず、すべてのユーザー入力(およびリスナー)を無視することを意味します。しかし、無効になっているリストビューで何ができるか、単に何もありません。

ただし、アニメーションを1回実行すると、リストビューはユーザーと対話する必要がないため、無効にすることは良いことであり、私のソリューションに一歩近づきます。私が解決しなければならなかった唯一のことは、アニメーションが再び反転したときに適切なタイミングでリストビューを有効にすることです。これを行うには、リストビューを無効にし、リストビューの下にあるRelativeLayoutをonClickListenerでクリックできるようにしました。onClickListenerは、ユーザーがlistViewをクリックするとリッスンし、アニメーションを逆に設定して、listviewを再度有効にします。問題が解決しました。

これにより、リストビューがユーザーインタラクションから見えなくなりました。

if(isUnfolded)
{
  listview_Contacts.setClickable(false);
  listview_Contacts.setEnabled(false);
}
else
{
  listview_Contacts.setClickable(true);
  listview_Contacts.setEnabled(true);
}

RelativeLayoutがクリックされたときに監視するonClickListener。

rlvLayout.setOnClickListener(new OnClickListener() 
{           
public void onClick(View v) 
    {
      if(isUnfolded)
         toggleFoldAnimation();
}
});

より良い解決策については、遠慮なく回答またはコメントを追加してください。そうでない場合は、この解決策が他の人々の助けになることを願っています。

于 2012-10-20T16:38:58.973 に答える
0

つまり、基本的に私が起こったと思うのは、ビューがUIの観点からアニメーション化された(レンダリングだけです)が、その物理的な位置は変わらなかったということです。メソッドlayoutを使用して、アニメーションの終了時にそのビューを明示的に移動する必要があります。

animation_Fold.setAnimationListener(new AnimationListener() {
           @Override
            public void onAnimationEnd(Animation animation) {
                // Move your view here using view.layout(r, t, l, b)
            }
});

そうすれば、ビューが目的の位置に移動します。

于 2012-10-20T14:04:44.317 に答える