2011-12-07 5 views
2

3 개의 RadioButton이있는 RadioGroup이 포함 된 Android보기가 있습니다. RadioButton 중 하나가 선택되면 사용자는 EditText 컨트롤에 텍스트도 입력해야합니다. 다른 두 개의 라디오 버튼 중 하나를 선택하면이 추가 정보가 필요하지 않습니다.애니메이션이있는 Android 컨트롤을 숨길 수 있습니까?

현재 RadioGroup에 대해 OnCheckedChangedListener를 사용하여 새 RadioButton이 선택되었는지 확인하고 ViewTGONE에 대한 가시성을 설정하여 EditText를 숨 깁니다. 그러나 이것은 약간의 껄끄 러운 소리이며, 내가 전환을 움직일 수있는 방법이 있는지 궁금합니다. 이것이 가능합니까? 그렇다면 시작할 때 핵심은 무엇입니까?

답변

1

, 코드를 기반으로 한 내 활동에 http://tech.chitgoks.com/2011/10/29/android-animation-to-expand-collapse-view-its-children/

에서 찾을 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.edit_account); 
    companyGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) 
     { 
      if (checkedId == R.id.companyRadio) 
       EDNUtils.expandCollapse(companyNameText, true, 500); 
      else 
       EDNUtils.expandCollapse(companyNameText, false, 500); 
     } 
    }); 
} 

구현

기사를 참조하십시오 EDNUtils의 :

public static Animation expandCollapse(final View v, final boolean expand) 
{  
    return expandCollapse(v, expand, 1000); 
} 

public static Animation expandCollapse(final View v, final boolean expand, final int duration) 
{ 
    int currentHeight = v.getLayoutParams().height; 
    v.measure(MeasureSpec.makeMeasureSpec(((View)v.getParent()).getMeasuredWidth(), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    final int initialHeight = v.getMeasuredHeight(); 

    if ((expand && currentHeight == initialHeight) || (!expand && currentHeight == 0)) 
     return null; 

    if (expand) 
     v.getLayoutParams().height = 0; 
    else 
     v.getLayoutParams().height = initialHeight; 
    v.setVisibility(View.VISIBLE); 

    Animation a = new Animation() 
    { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) 
     { 
      int newHeight = 0; 
      if (expand) 
       newHeight = (int) (initialHeight * interpolatedTime); 
      else 
       newHeight = (int) (initialHeight * (1 - interpolatedTime)); 
      v.getLayoutParams().height = newHeight;    
      v.requestLayout(); 

      if (interpolatedTime == 1 && !expand) 
       v.setVisibility(View.GONE); 
     } 

     @Override 
     public boolean willChangeBounds() 
     { 
      return true; 
     } 
    }; 
    a.setDuration(duration); 
    v.startAnimation(a); 
    return a; 
} 
관련 문제