TextView expand animation like in Android Market

前端 未结 1 1525
没有蜡笔的小新
没有蜡笔的小新 2020-12-04 14:43

Can anyone point to solution how to make expand animation of Description TextView in Android Market animation? There are TextView wrapped into FrameLayout which expands afte

1条回答
  •  情深已故
    2020-12-04 15:29

    Solution:

    private static int measureViewHeight( View view2Expand, View view2Measure ) {
        try {
            Method m = view2Measure.getClass().getDeclaredMethod("onMeasure", int.class, int.class);
            m.setAccessible(true);
            m.invoke(view2Measure,
                        MeasureSpec.makeMeasureSpec(view2Expand.getWidth(), MeasureSpec.AT_MOST),
                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        } catch (Exception e) {
            return -1;
        }
    
        int measuredHeight = view2Measure.getMeasuredHeight();
        return measuredHeight;
    }
    
    static public void expandOrCollapse( View view2Expand, View view2Measure,
            int collapsedHeight ) {
        if (view2Expand.getHeight() < collapsedHeight)
            return;
    
        int measuredHeight = measureViewHeight(view2Expand, view2Measure);
    
        if (measuredHeight < collapsedHeight)
            measuredHeight = collapsedHeight;
    
        final int startHeight = view2Expand.getHeight();
        final int finishHeight = startHeight <= collapsedHeight ?
                measuredHeight : collapsedHeight;
    
        view2Expand.startAnimation(new ExpandAnimation(view2Expand, startHeight, finishHeight));
    }
    
    class ExpandAnimation extends Animation {
        private final View _view;
        private final int _startHeight;
        private final int _finishHeight;
    
        public ExpandAnimation( View view, int startHeight, int finishHeight ) {
            _view = view;
            _startHeight = startHeight;
            _finishHeight = finishHeight;
            setDuration(220);
        }
    
        @Override
        protected void applyTransformation( float interpolatedTime, Transformation t ) {
            final int newHeight = (int)((_finishHeight - _startHeight) * interpolatedTime + _startHeight);
            _view.getLayoutParams().height = newHeight;
            _view.requestLayout();
        }
    
        @Override
        public void initialize( int width, int height, int parentWidth, int parentHeight ) {
            super.initialize(width, height, parentWidth, parentHeight);
        }
    
        @Override
        public boolean willChangeBounds( ) {
            return true;
        }
    };
    

    0 讨论(0)
提交回复
热议问题