誰かがnoobにタッチエリアとイメージが実際に一緒に動くようにビューをアニメートする正しい方法を説明できますか?ビューを正しく移動する方法は?
多くの投稿と質問とチュートリアルを読んだことがありますが、レイアウトを動かすものと画像を動かすものについて説明していないので、ビューをアニメーション化して新しい位置に残すことができます。
これは私が協力している方法の1つで、さまざまな組み合わせを試してみると成功しません。ビューは親RelativeLayoutにあります。それは触れることのできるアイコンメニューで、xmlリソースをクリックするとアニメーションが表示され、小さなタブが表示されたままスクリーンからスライドして、再びクリックするまで保持する必要があります。
public void RetractTools (View v){
final ImageView finalImage1 = (ImageView) findViewById(R.id.paintsView);
Animation slideout = AnimationUtils.loadAnimation(this, R.anim.slideout_tools);
slideout.setFillAfter(true);
slideout.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
finalImage1.setEnabled(true);
optionMenu.showing = false;
optionMenu.inMotion = false;
finalImage1.layout(1258, 668, 1697, 752);
finalImage1.setRight(1280);
finalImage1.invalidate();
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
finalImage1.setEnabled(false);
}
});
optionMenu.inMotion = true;
v.startAnimation(slideout);
}// End RetractMenu
問題が発生しても問題は発生します。 setFillAfterはxmlファイルに設定されても何もしません。プログラマチックに設定すると、画像は正しい場所に残されますが、タッチコントロールはメニューの位置に残ります。私はsetLeftとsetRightを試してみましたが、ビュー位置ではなく、さまざまなレイアウトオプションがあり、塗りつぶしや塗りつぶしや無効化はしませんが、解決できません。ビューを配置してレンダリングするために必要な基本的な仕組みをはっきりとはわかりません。 :D
ありがとうございます。
EDIT:ソリューション
同様の問題を持つ人のために、これは私が相対的なレイアウトで作業することが分かってきた方法です。指定したサイズのLayoutParamsオブジェクトを作成し、その位置を割り当てることができます。例えば。
final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
position.leftMargin = 440;
は、そのように要約すると、あなたはむしろ、私が想定して直接ビューの座標にアクセスするよりも、あなたのビューの位置へのインタフェースとしてLayoutParamsオブジェクトを使用してビュー
myView.setLayoutParams(position);
にそれを割り当てます。
ありがとうございました。私は.Layout()がレイアウトパラメータを直接変更したと思った?setFillAfterとsetRightの行を削除して同じコードを使用すると、アニメーションの終わりを除いて、何も描画されていない1つのフレームグリッチがあります。 固定値表示用の値です。私のTF101で私が使っているプライベートアプリだから、ハードコーディングされた値の使用は気にしない。 ;) –
また、setFillAfter()を保持し、.Layout()を削除すると、アニメーションは私の望むものとまったく同じですが、ビューのタッチレイアウトは残っています。 –
@TickledPink: ".Layout()がレイアウトパラメータを直接変更したと思いますか?"レイアウトに基づいたルールに置き換えられます。そのため、 'LayoutParams'を調整する必要があります。 – CommonsWare