I'm try to zoom a FrameLayout with the following example from der android 
developers site: http://developer.android.com/training/animation/zoom.html

My concrete Problem, in the first time the animation is right, is expand 
from the thumbView, in the second time the animation comes from 'somewhere' 
(middle/top to the center).

i have nearly the same, the differents are, i have an Framelayout instead 
an ImageView and i extract the function to minimize the View back in an 
extra Method. now thats looks like so:

    private void zoomImageFromThumb(final View thumbView) {
       
        if (mCurrentAnimator != null) {
            mCurrentAnimator.cancel();
        }
    
        // here i building my custome layout
    
        startBounds = new Rect();
        final Rect finalBounds = new Rect();
        final Point globalOffset = new Point();
    
        thumbView.getGlobalVisibleRect(startBounds);
        findViewById(R.id.container)
                .getGlobalVisibleRect(finalBounds, globalOffset);
        startBounds.offset(-globalOffset.x, -globalOffset.y);
        finalBounds.offset(-globalOffset.x + 15, -globalOffset.y + 60);
    
        float startScale;
        if ((float) finalBounds.width() / finalBounds.height()
                > (float) startBounds.width() / startBounds.height()) {
            
            startScale = (float) startBounds.height() / 
finalBounds.height();
            float startWidth = startScale * finalBounds.width();
            float deltaWidth = (startWidth - startBounds.width()) / 2;
            startBounds.left -= deltaWidth;
            startBounds.right += deltaWidth;
        } else {
           
            startScale = (float) startBounds.width() / finalBounds.width();
            float startHeight = startScale * finalBounds.height();
            float deltaHeight = (startHeight - startBounds.height()) / 2;
            startBounds.top -= deltaHeight;
            startBounds.bottom += deltaHeight;
        }
    
        thumbView.setAlpha(0f);
        expandedImageView.setVisibility(View.VISIBLE);
    
        expandedImageView.setPivotX(0f);
        expandedImageView.setPivotY(0f);
    
        AnimatorSet set = new AnimatorSet();
        set
                .play(ObjectAnimator.ofFloat(expandedImageView, View.X,
                        startBounds.left, finalBounds.left))
                .with(ObjectAnimator.ofFloat(expandedImageView, View.Y,
                        startBounds.top, finalBounds.top))
                .with(ObjectAnimator.ofFloat(expandedImageView, 
View.SCALE_X,
                startScale, 
1f)).with(ObjectAnimator.ofFloat(expandedImageView,
                        View.SCALE_Y, startScale, 1f));
        set.setDuration(mShortAnimationDuration);
        set.setInterpolator(new DecelerateInterpolator());
        set.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                mCurrentAnimator = null;
            }
    
            @Override
            public void onAnimationCancel(Animator animation) {
                mCurrentAnimator = null;
            }
        });
        set.start();
        mCurrentAnimator = set;
    }

the startBounds Variable is global, cause i need this to know where the 
position is for the minimize process. Here the minimize Method:

        private void minimizeViewFromThumb(final View thumbView) {
        if (mCurrentAnimator != null) {
                        mCurrentAnimator.cancel();
                    }
        
                    AnimatorSet set = new AnimatorSet();
                    set.play(ObjectAnimator
                                .ofFloat(expandedImageView, View.X, 
startBounds.left))
                                .with(ObjectAnimator
                                        .ofFloat(expandedImageView, 
                                                View.Y,startBounds.top))
                                .with(ObjectAnimator
                                        .ofFloat(expandedImageView, 
                                                View.SCALE_X, 
startScaleFinal))
                                .with(ObjectAnimator
                                        .ofFloat(expandedImageView, 
                                                View.SCALE_Y, 
startScaleFinal));
                    set.setDuration(mShortAnimationDuration);
                    set.setInterpolator(new DecelerateInterpolator());
                    set.addListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
            
    
                    thumbView.setAlpha(1f);
                        expandedImageView.setVisibility(View.GONE);
                        mCurrentAnimator = null;
                    }
    
                    @Override
                    public void onAnimationCancel(Animator animation) {
                        thumbView.setAlpha(1f);
                        expandedImageView.setVisibility(View.GONE);
                        mCurrentAnimator = null;
                    }
                });
                set.start();
                mCurrentAnimator = set;
    }

if i debug this whole process i can see that the method 
getGlobalVisibleRect from the method zoomViewFromThumb give me another 
value.

if i debug the line 

    finalBounds.offset(-globalOffset.x, -globalOffset.y);

in the first time the two parameters are 0 and -60 and in the second time 
(after minimize and recreate there are 15 and 360.

i have no idea why thats happen.

i have try to set the View.X and View.Y parameter append from the given 
thumbView, i have try to work with constant Values for the View.X, View.Y 
parameter in the ObjectAnimator but nothing fix my problem.

now please help me.

Greets Manu

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to