0

強調したい ImageButton があります。ダウンロードが完了すると点滅します。

背景を aTransitionDrawableに設定し、トランジションが終了したらリセットしようとしていますが、奇妙な結果が得られます。

  • トランジションがアクティブになるとボタンのパディングが消え、終了時に元のドローアブルを復元しても復元されません。
  • 遷移はボタンのストローク (境界線) でのみ発生し、背景の領域を塗りつぶすグラデーションでは発生しません。

これは、トランジションを有効にし、元に戻し、元の描画可能な背景を復元するために使用している Java コードです。

downloadButton.setBackgroundResource(R.drawable.animate_background);
Drawable background = downloadButton.getBackground().getCurrent();
if (background instanceof TransitionDrawable) {
  TransitionDrawable transition = (TransitionDrawable) background;
  transition.startTransition(300);
  downloadButton.postDelayed(new Runnable() {
    @Override
    public void run() {
      // reverse the transition after it completes
      Drawable background = downloadButton.getBackground().getCurrent();
      if (background instanceof TransitionDrawable) {
        TransitionDrawable transition = (TransitionDrawable) background;
        transition.reverseTransition(200);
        downloadButton.postDelayed(new Runnable() {
          @Override
          public void run() {
            // restore original background
            downloadButton.setBackgroundResource(R.drawable.custom_button);                                 
          }
        }, 200); // after reverse transition
      }
    }
  }, 300); // after transition
}

これは、レイアウト xml のボタンです。

<ImageButton
    android:id="@id/download_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_button"
    android:padding="14dp"
    android:src="@drawable/download_icon" />

これは、custom_button ドローアブルの xml です。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
    <shape>
        <solid android:color="#343434" />
        <stroke  android:width="1dp" android:color="#171737" />
        <corners android:radius="5dp" />
    </shape>
</item>
<item>
    <shape>
        <gradient  android:startColor="#343434"  android:endColor="#171737" android:angle="270" />
        <stroke    android:width="1dp"     android:color="#171717" />
        <corners   android:radius="5dp" />
    </shape>
</item>

トランジション「animate_background」xml:

<?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/animate_start" />
  <item android:drawable="@drawable/animate_end" />
</transition>

アニメーション開始 xml (アニメーション終了は非常に似ていますが、グラデーションとストロークの色が異なるだけです)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <gradient  android:startColor="#34F434"  android:endColor="#174717" android:angle="270" />
    <stroke    android:width="2dp"  android:color="#17F717" />
    <corners android:radius="5dp" />
</shape>
4

1 に答える 1

2

バックグラウンドをトランジションに設定した後、パディングを手動で設定することで解決しました-ボタンのxmlで設定されたパディング値の2倍を使用する必要がありました。

例えば。

downloadButton.setBackgroundResource(R.drawable.animate_background);
downloadButton.setPadding(28, 28, 28, 28);
于 2014-02-19T08:55:17.710 に答える