Android アニメーション クラスを調べましたが、探しているものが表示されているかどうかわかりません。LayerDrawable の単一レイヤーに変換アニメーション (X 座標の変更) を追加できるかどうか疑問に思っていましたか? TranslateAnimation クラスを見つけましたが、それは ImageView 全体でしか機能しないようで、LayerDrawable の 1 つのレイヤーをアニメーション化したいだけです。何かアドバイス?前もって感謝します。
3 に答える
要するに:ValueAnimatorを使用して、そのドローアブルの境界を調整できます
詳細:
レイヤー リスト ドローアブルと内部アイテム ドローアブル ( ) があり、レイアウトに があり ( )、このレイヤード ドローアブルがプロパティに割り当てられid:innerRed
ていると仮定すると、 ValueAnimatorを使用して境界を調整できます。以下の例のように、そのドローアブルのButton
id:btnWithDrawableBg
background
x
pos_animator.xml
<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:andoird="http://schemas.android.com/apk/res/android"
andoird:repeatCount="infinite"
andoird:repeatMode="reverse"
andoird:valueFrom="-100"
andoird:valueTo="100"
andoird:valueType="intType"
/>
MyActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// our button with the drawable background
Button btnWithBg = (Button) findViewById(R.id.btnWithDrawableBg);
// the layered drawable
final LayerDrawable layerDrawable = (LayerDrawable) btnWithBg.getBackground();
// internal layer (item) drawable with id:innerRed
final GradientDrawable innerRedShape = (GradientDrawable)layerDrawable.findDrawableByLayerId(R.id.innerRed);
// our animator based on the xml above
ValueAnimator posAnim = (ValueAnimator) AnimatorInflater.loadAnimator(
mainLayout.getContext(), R.animator.pos_animator);
posAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// get current offset value and adjust drawable bounds
int value = (Integer)animation.getAnimatedValue();
Rect bounds = innerRedShape.copyBounds();//see Note below
// here only manipulating x value
bounds.offset(value, 0);
innerRedShape.setBounds(bounds);
}
});
posAnim.setTarget(innerRedShape);
posAnim.start();
}
注:このSO 投稿に基づいてcopyBounds()
(だけでなく)必須ですgetBounds().offset()
私は自分の答えを見つけました... LayerDrawable が構成されると、実際にはレイヤーを操作できないようです。応答がないことから、私の質問はおそらく間違ったことを尋ねていると考え、LayerDrawable を使用するように再設計しましたが、アニメーションを個々の drawable/imageView オブジェクトとして生成し、各アニメーションの直前と直後に破棄しています。次に、imageView で ObjectAnimator を使用して、目的の画像の変換を実現します。そのため、LayerDrawable の個々のレイヤーをアニメーション化したいと思っている人がこれを読んだ場合に備えて、Animator クラスを使用できるように再設計してみてください。