2016-09-06 2 views
0

TextView와 Button이 포함 된 Activity 내부에 조각이 있습니다. Button을 클릭하면 다른 Fragment가로드되고 첫 번째 Fragment의 TextView 텍스트가 툴바의 제목이됩니다. Transition Framework 및 changeBounds와 같은 기능을 사용하여이 변경 사항에 애니메이션을 적용하고 싶지만 툴바의 전환을 설정하는 방법을 모르겠습니다. 누군가 나를 솔루션으로 안내 할 수 있습니까?조각 내 TextView에서 도구 모음의 제목으로 전환

답변

0

당신은 다음과 같이 텍스트 뷰의 텍스트 크기를 애니메이션을 사용자 정의 전환을 만들 수 있습니다

public class TextSizeTransition extends Transition { 
    private static final String PROPNAME_TEXT_SIZE = "lychmanit:transition:textsize"; 
    private static final String[] TRANSITION_PROPERTIES = { PROPNAME_TEXT_SIZE }; 

private static final Property<TextView, Float> TEXT_SIZE_PROPERTY = 
     new Property<TextView, Float>(Float.class, "textSize") { 
      @Override 
      public Float get(TextView textView) { 
       return textView.getTextSize(); 
      } 

      @Override 
      public void set(TextView textView, Float textSizePixels) { 
       textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSizePixels); 
      } 
     }; 

public TextSizeTransition() { 
} 

public TextSizeTransition(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public String[] getTransitionProperties() { 
    return TRANSITION_PROPERTIES; 
} 

@Override 
public void captureStartValues(TransitionValues transitionValues) { 
    captureValues(transitionValues); 
} 

@Override 
public void captureEndValues(TransitionValues transitionValues) { 
    captureValues(transitionValues); 
} 

private void captureValues(TransitionValues transitionValues) { 
    if (transitionValues.view instanceof TextView) { 
     TextView textView = (TextView) transitionValues.view; 
     transitionValues.values.put(PROPNAME_TEXT_SIZE, textView.getTextSize()); 
    } 
} 

@Override 
public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, 
           TransitionValues endValues) { 
    if (startValues == null || endValues == null) { 
     return null; 
    } 

    Float startSize = (Float) startValues.values.get(PROPNAME_TEXT_SIZE); 
    Float endSize = (Float) endValues.values.get(PROPNAME_TEXT_SIZE); 
    if (startSize == null || endSize == null || 
     startSize.floatValue() == endSize.floatValue()) { 
     return null; 
    } 

    TextView view = (TextView) endValues.view; 
    view.setTextSize(TypedValue.COMPLEX_UNIT_PX, startSize); 
    return ObjectAnimator.ofFloat(view, TEXT_SIZE_PROPERTY, startSize, endSize); 
} 

}

TextView's 텍스트 크기를 변경하면 레이아웃의 경계가 애니메이션의 과정에서 변경됩니다 때문에 전환이 제대로 작동하려면 전환 ChangeBoundsTransitionSet에 던지기 만하면됩니다. 대신에 수행해야 할 일은 SharedElementCallback의 끝 상태에서 뷰를 수동으로 측정/레이아웃하는 것입니다.