私はAndroidのいくつかのpngシーケンスを持っています。画面の上端から下端までのxとyの姿勢変換をアニメーションする必要があります。アニメーションが実行されている間、私はクリックイベントを受け取るオブジェクトが必要です。Androidでインタラクティブなアニメーション(翻訳)をする方法
あなたは(クリックイベントの半ばアニメーションを取得しないように、オブジェクトの表示は、実際のオブジェクトとは異なる場所にあるので、私は、これは3.0以前のAndroidバージョンでは本当によく動作しません理解していますあなたがオブジェクトをクリックしていないので、ディスプレイ上でのみ必要です)。
私はこのような何かをやっている、とアニメーションが正常に見えるが、私はクリックハンドラーに取得することはありません:
Animation animation = new TranslateAnimation(0, 20,0, 300);
animation.setDuration(1000);
ticket.startAnimation(animation);
ticket.startAnimation(animation);
ticket.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
//I don't get into this click event during animation
view.setVisibility(View.GONE);
}
});
3.0前のデバイスのためのインタラクティブなアニメーションをサポートするための回避策は何ですか?背景のスレッドを使ってオブジェクトのxとyの位置をアニメートするカスタムアニメーションクラスがありますか?
--update --- NineOldAndroidのソリューションを使用してみましたが、アニメーションはうまく見えますが、アニメーション中にonclickイベントが表示されません。ここに私の更新されたコードです。だから、これはICS上でうまく動作しますが、2.3ではなく何か間違っていますか?またはフードのレイアウトマージンを実際に変更していないNineOldWorldのソリューションですか?
ImageView ticket = new ImageView(myActivity);
ticket.setImageResource(R.drawable.ticket);
ticket.setVisibility(View.INVISIBLE);
ticketHolder.addView(ticket);
ValueAnimator animation = ObjectAnimator.ofFloat(ticket, "y",
-200f, ticketHolder.getHeight());
animation.setDuration(3000);
animation.start();
animation.setStartDelay(i*1000);
animationsMap.put(animation, ticket);
ticket.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
view.setVisibility(View.GONE);
}
});
animation.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
// tickets.remove(((ObjectAnimator)animation).getTarget());
ImageView t = (ImageView) ((ObjectAnimator) animation).getTarget();
t.setVisibility(View.GONE);
animationsMap.remove(animation);
if(animationsMap.size() == 0){
ticketsAnimating = false;
scrim.setVisibility(View.VISIBLE);
}
}
@Override
public void onAnimationStart(Animator animation){
ImageView t = (ImageView) ((ObjectAnimator) animation).getTarget();
t.setVisibility(View.VISIBLE);
}
});
- 更新#2 --- 私はまた、パスアニメーションを試してみましたが、アニメーションの間に、そして、私はボタンのクリックイベントが届かないの後。誰でも私が間違っていることを知っている?
mButton = (Button) findViewById(R.id.delete_me);
mButtonProxy = AnimatorProxy.wrap(mButton);
// Set up the path we're animating along
AnimatorPath path = new AnimatorPath();
path.moveTo(0, 0);
path.lineTo(0, 300);
path.curveTo(100, 0, 300, 900, 400, 500);
// Set up the animation
final ObjectAnimator anim = ObjectAnimator.ofObject(this, "buttonLoc",
new PathEvaluator(), path.getPoints().toArray());
anim.setDuration(10000);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("united", "button clicked");
anim.start();
}
});
パーフェクト!本当にありがとう!私は試してみるつもりです。 –
私の答えが更新されました。なぜクリックイベントが発生していないのかについて、notoldandroidの解決策が間違っているのが分かりますか? –
NineOldAndroidsは、統一されたAPIを提供するだけです。残念ながら、ネイティブビューアニメーションを使用していたときと同じ制限があります。アニメーションが画面上で何かを動かし、それをクリック可能なままにしたい場合、アニメーションが完了すると、そのオブジェクトを 'LayoutParams'を使って物理的に移動する必要があります。それは吸うが、それは私たちが持っているすべてです。 –