2014-02-10 3 views
0

저는 강조하고 싶은 ImageButton이 있습니다 - 예. 다운로드가 완료되면 깜박입니다.ImageButton의 배경에 대한 전환

나는 TransitionDrawable에 배경을 설정하고 전환이 완료 될 때 다시 재설정하기 위해 노력하고있어,하지만 난 이상한 결과를 얻을 :

  • 버튼의 패딩 사라 전환이 활성화되면 및 ISN 완료되면 원래 드로어 블을 복원 할 때 복원되지 않습니다.
  • 전환은 버튼의 획 (테두리)에서만 발생하지만 배경 영역을 채우는 그라디언트에서는 발생하지 않습니다.

이 내가, 전환 활성화를 반대하고 원래 당김 배경 복원하는 데 사용하고있는 자바 코드 :

<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에있는 버튼을

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 
} 

이다는

이것은 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 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을 시작할 배경을 전환으로 설정 - 버튼에 대해 xml에 설정된 패딩 값을 두 번 사용해야했습니다.

예 :

downloadButton.setBackgroundResource(R.drawable.animate_background); 
downloadButton.setPadding(28, 28, 28, 28);