MerqueeのようにTranslateX Animation Right to Left の ImageButtonがあるため、右から左にアニメーション化されます。クリックしても何も起こりませんでした。実際にはクリックは実行されず、クリックはimagebuttonの実際の位置でのみ実行されます。
何をすればいいですか?大変感謝しています...ありがとう
MerqueeのようにTranslateX Animation Right to Left の ImageButtonがあるため、右から左にアニメーション化されます。クリックしても何も起こりませんでした。実際にはクリックは実行されず、クリックはimagebuttonの実際の位置でのみ実行されます。
何をすればいいですか?大変感謝しています...ありがとう
オブジェクトのアニメーション化には ObjectAnimator (以降のバージョンでは Honeycomb) を使用します。参照用に次のコードを使用できます。
RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
ObjectAnimator mover = ObjectAnimator.ofFloat(layout, "translationX",
width, -width);
mover.setDuration(10000);
mover.setRepeatMode(Animation.INFINITE);
mover.setRepeatCount(Animation.INFINITE);
mover.start();
Apiを使用している場合は、次にハニカム(ジンジャーブレッドのように)を使用してから、このライブラリを使用します:http://nineoldandroids.com/
それは私のデバイスで動作するように動作します。
現在、ビューのマトリックスを変更するアニメーションは、ビューが描画される座標のみを変更し、レイアウト内のビューの実際の位置は変更しません。onDraw()
そのため、そのビューが呼び出されているときの単なるキャンバス変換です。
したがって、setTranslationX(100)
ビューは右に 100 ピクセル描画されます。ただし、クリック領域 ( getHitRect()
) は、レイアウト パスでビューに割り当てられた場所と同じままです。
または、実際にビューをアニメーション後にあるべき場所に配置し、アニメーションを逆方向に実行することもできます。
実際にレイアウトを変更したい場合は、そのビューを変更し、LayoutParams
幅/高さ/マージンを変更する必要があります。次にrequestLayout()
、アニメーションの各フレームで行う必要があります。
例: これは、FrameLayout 内のビューの左マージンをアニメーション化します。
//---assuming animated view is a child of Framelayout---
FrameLayout parent;
View animatedChild;
ValueAnimator animator = new ValueAnimator();
animator.setFloatValues(0,parent.getWidth()); //--slide out to right--
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
FrameLayout.LayoutParams params = animatedChild.getLayoutParams();
Float margin = (Float) valueAnimator.getAnimatedValue();
params.leftMargin = margin.intValue();
animatedChild.requestLayout();
}
});
animator.start();
Androidアプリを開発する前に、同様の問題に遭遇しました。そして、アニメーションが実行されているときに、実際に画像レイヤーが流れていることを発見しました。したがって、ボタンの元の位置をクリックする必要があります。つまり、ボタンが動き始めた場合は、黒いスペースをクリックする必要がある場合があります。