3

「サインイン」というボタンがあります。ユーザーがそれを押すと、ユーザーのログイン情報を取得する警告ダイアログが表示されます。ユーザーが情報を入力して [OK] をクリックすると、ボタンは「ようこそ、[ユーザー名]」を含むのに必要な幅まで伸びます。私がやろうとしているのは、「サインイン」から「ようこそ、[ユーザー名]」へのボタンの幅の変化をアニメーション化することです。

ボタンの背景を 9 パッチで作成しました。これは、xml ファイルで異なる幅を指定すると完全に機能します。デフォルトの幅からより長い幅への幅の変更をアニメーション化しようとすると、9.png ではなく、通常の .png のように伸びます。

ある静的な幅から別の幅に伸ばすために使用しているコードは次のとおりです。

<Button
    android:id="@+id/signIn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:background="@drawable/button_nine_patch"
    android:textSize="20dip"
    android:layout_marginBottom="-2dip" />

 ScaleAnimation stretch = new ScaleAnimation(1.0f ,10.0f, 1.0f, 1.0f);

 this.signIn = (Button) this.findViewById(R.id.signIn);
 this.signIn.setOnClickListener(this);

 stretch.setDuration(2000);
 signIn.startAnimation(stretch);

人の名前が何文字になるかわからないので、コードからボタンの最終的な幅を設定できるようにする必要があります。

私は狂ったようにグーグルで検索し、すべてのAndroidドキュメントを調べましたが、この問題に対する答えが見つかりません.

どんな助けでも大歓迎です。

4

1 に答える 1

1

Android がビューでアニメーション プロセスを実行するとき、実際のビューではなく、現在のビューのビットマップ表現をアニメーション化します。ビューをアニメーション化するには、ビューを囲むコンポーネントを処理する必要があり、コストが大幅に高くなります。これは通常は有益ですが、あなたの状況では 9patch が古いビットマップに変わってしまうため、望ましい結果が得られません。

ビューの特定の領域のみを変換する方法がわかりません。ここに専用の質問があります:ビュー/ビットマップの特定の領域をストレッチ/スケールします

于 2013-04-26T01:01:22.800 に答える