RelativeLayout に 2 つのビューがあり、どちらも画面いっぱいに表示されるため、ビュー B はビュー A の上にあります。また、ビュー B を部分的に画面外に移動してビュー A を下に表示できるアニメーションも定義しています。アニメーションは正常に動作しますが、ビューの境界がビューと共に移動しないという古典的な問題があるため、アニメーションをトリガーするために使用するボタン (ビュー B にあります) は元の位置からしかクリックできません。ビューBがどこにあるかの問題。私が抱えている問題は、アニメーションが終了した後、レイアウト パラメータを設定すると、ビュー B がアニメーションの終了位置から変換されて再描画されることです。
具体的な例として、ビュー B の左端は最初は x = 0 にあり、ボタンは x = 450 にあります。ボタンを押すと、アニメーションによってビューが x = -400 に移動します。これは適切に機能します。ビューは画面の左側から部分的に外れており、ボタンは x = 50 にあるため、まだ画面上にあります。ただし、ボタンのクリック領域は x = 450 のままです。そのため、ビュー B にレイアウト パラメータを設定します。
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) viewB.getLayoutParams();
lp.rightMargin = 400;
viewB.setLayoutParams(lp);
新しいパラメーターが設定されると、ビューの右側に 400 ピクセルのパディングが追加され、ビュー全体が x = -800 に移動します。ただし、ボタンのクリック可能な領域は x = 50 に適切に配置されているので、正しく表示したり、正しく動作させたりすることができるようです。私が間違っていることは何か分かりますか?アニメーションの設定方法は次のとおりです。
Animation anim = null;
anim = new TranslateAnimation(0, -400, 0, 0);
anim.setAnimationListener(this);
anim.setDuration(duration);
viewB.startAnimation(anim);