2014-02-10 5 views
0

У меня есть ImageButton, который я хотел бы выделить - например. когда загрузка завершена.переход для фона ImageButton

Я пытаюсь установить фон на TransitionDrawable и сбросить его обратно, когда переход закончен, но я получаю странные результаты:

  • Обивка кнопки исчезает после перехода активируется и ISN 't восстанавливается, когда я восстанавливаю оригинал, когда он закончен.
  • Переход происходит только на штрих (граница) кнопки, но не на градиент, который заполняет область фона.

Это код 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" /> 

Это 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> 

ответ

2

решаемые путем установки заполнение вручную после настройка фона для перехода - и мне пришлось дважды использовать значение дополнения, которое было установлено в xml для кнопки.

например.

downloadButton.setBackgroundResource(R.drawable.animate_background); 
downloadButton.setPadding(28, 28, 28, 28); 
Смежные вопросы