2016-07-05 14 views
0
private void zoomImageFromThumb(final View thumbView, int imageResId){ 

    // If there's an animation in progress, cancel it 
    // immediately and proceed with this one. 
    if (mCurrentAnimator != null) { 
     mCurrentAnimator.cancel(); 
    } 
    Drawable expanded_image_background=getResources().getDrawable(R.drawable.background_expanded_image); 



    // Load the high-resolution "zoomed-in" image. 
    final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image); 
    expandedImageView.setImageResource(imageResId); 
    expandedImageView.bringToFront(); 

    // Calculate the starting and ending bounds for the zoomed-in image. 
    // This step involves lots of math. Yay, math. 
    final Rect startBounds = new Rect(); 
    final Rect finalBounds = new Rect(); 
    final Point globalOffset = new Point(); 

    // The start bounds are the global visible rectangle of the thumbnail, 
    // and the final bounds are the global visible rectangle of the container 
    // view. Also set the container view's offset as the origin for the 
    // bounds, since that's the origin for the positioning animation 
    // properties (X, Y). 
    thumbView.getGlobalVisibleRect(startBounds); 
    findViewById(R.id.container).getGlobalVisibleRect(finalBounds, globalOffset); 
    startBounds.offset(-globalOffset.x, -globalOffset.y); 
    finalBounds.offset(-globalOffset.x, -globalOffset.y); 

    // Adjust the start bounds to be the same aspect ratio as the final 
    // bounds using the "center crop" technique. This prevents undesirable 
    // stretching during the animation. Also calculate the start scaling 
    // factor (the end scaling factor is always 1.0). 
    float startScale; 
    if ((float) finalBounds.width()/finalBounds.height() 
      > (float) startBounds.width()/startBounds.height()) { 
     // Extend start bounds horizontally 
     startScale = (float) startBounds.height()/finalBounds.height(); 
     float startWidth = startScale * finalBounds.width(); 
     float deltaWidth = (startWidth - startBounds.width())/2; 
     startBounds.left -= deltaWidth; 
     startBounds.right += deltaWidth; 
    } else { 
     // Extend start bounds vertically 
     startScale = (float) startBounds.width()/finalBounds.width(); 
     float startHeight = startScale * finalBounds.height(); 
     float deltaHeight = (startHeight - startBounds.height())/2; 
     startBounds.top -= deltaHeight; 
     startBounds.bottom += deltaHeight; 
    } 

    // Hide the thumbnail and show the zoomed-in view. When the animation 
    // begins, it will position the zoomed-in view in the place of the 
    // thumbnail. 
    thumbView.setAlpha(0f); 
    expandedImageView.setVisibility(View.VISIBLE); 

    // Set the pivot point for SCALE_X and SCALE_Y transformations 
    // to the top-left corner of the zoomed-in view (the default 
    // is the center of the view). 
    expandedImageView.setPivotX(0f); 
    expandedImageView.setPivotY(0f); 

    // Construct and run the parallel animation of the four translation and 
    // scale properties (X, Y, SCALE_X, and SCALE_Y). 
    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; 

    // Upon clicking the zoomed-in image, it should zoom back down 
    // to the original bounds and show the thumbnail instead of 
    // the expanded image. 
    final float startScaleFinal = startScale; 
    expandedImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mCurrentAnimator != null) { 
       mCurrentAnimator.cancel(); 
      } 

      // Animate the four positioning/sizing properties in parallel, 
      // back to their original values. 
      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; 
     } 
    }); 
} 

zur Zeit ich auf Animationen arbeite, und ich habe ein Bild auf Imageview und wenn ich es klicken, wird es herausgezoomt, um die (in Bildschirm gefüllt), neben ihm in gezoomt .Ändern Hintergrundopazität (alpha-Ebene) der Reihe nach android

Ich habe this function verwendet, um eine Animation zu erstellen. Aber ich habe auch Hintergrund (Drawable-Ordner) von Imageview und ich möchte, dass es seine Undurchsichtigkeit vergrößert und verkleinert. Ich weiß, dass ich setAlpha() verwenden muss, aber ich kann nicht herausfinden, wo ich es einfügen soll. Bitte helfen ...

+0

könnte ich die Werte der Deckkraft kennen, die Sie einstellen möchten. 1. zum Vergrößern, 2. zum Herauszoomen ?? –

+0

> http://stackoverflow.com/questions/1492554/set-transparent-background-of-an-imageview-in-android/37323776#37323776 –

+0

Ich denke, es ist zwischen 0,0 und 1,0, also beim Herauszoomen von 0,0 bis 1,0 und umgekehrt –

Antwort

0

Sie brauchen Um zwei Hintergrundbilder zu erstellen, einen mit voller Deckkraft und einen anderen mit einer Deckkraft von 0, können Sie diesen Code verwenden, um von einem Zeichnungsträger zum anderen zu animieren.

Ich habe ein drawable Array erstellt, das zwei Zeichen enthält.

Drawable[] drawables = {ContextCompat.getDrawable(mActivity, R.drawable.firstBackgroundDrawable),ContextCompat.getDrawable(mActivity, R.drawable.secndBackgroundDrawable)}; 
TransitionDrawable trans = new TransitionDrawable(drawables); 
imageID.setBackground(trans); 
trans.setCrossFadeEnabled(true); 
trans.startTransition(5000); 

In startTransition(duration) können Sie die Animationsdauer einstellen.

+0

Danke für Ihre Antwort, aber ich denke, es ändert sich das Alpha-Level des Bildes nicht Der Hintergrund –

+0

Sorry, aber können Sie erklären, wie Ihr Code funktioniert, weil ich denke, dass es näher zu beantworten ist. Der einzige Unterschied ist, dass ich den Hintergrund (Zeichnungsordner) Alpha ändern möchte und ich denke, ich sollte es verwenden –

+0

'ObjectAnimator.ofFloat (targetView, propertyName, fromValue, toValue)' Eigenschaftsname könnte ** 'alpha' ** oder **' sein Rotation' **, fromValue und Value selbst verständlich. –

0

Wenn es als Bitmap gezeichnet wird, dies zu tun:

Paint alphaPaint = new Paint(); 
alphaPaint.setAlpha(ALPHA); 
canvas.drawBitmap(bitmap, x, y, alphaPaint); 

Für die Steuerung des Alpha, die Sie bis zu ist

EDIT:

Basierend auf dem, was Sie mir gesagt haben:

Paint alphaPaint = new Paint(); 
alphaPaint.setAlpha(ALPHA); 
alphaPaint.setColor(Color.BLACK); 
canvas.drawRect(rect, alphaPaint); 
+0

Vielen Dank, aber ich fürchte, Sie missverstanden mich , weil ich die Deckkraft des Hintergrunds nicht ändern möchte –

+0

Was ist der Hintergrund? – Zoe

+0

Was zeigt es? – Zoe

0

ihr_bild_name.animate(). SetDuration (300) α (0f);

ihr_bildname = ImageView, könnte alles sein! (Text/Knopf/Layout)

alpha (0f) = f bedeutet Schwimmer (0 = 0%, 1 = 100%)

alpha (0,5f) = 50% alpha

Wenn Sie möchten, Um das Alpha gleichzeitig mit dem Vergrößern/Verkleinern zu ändern, führen Sie es aus, wenn Sie die Animation des Zooms starten!

+0

Vielen Dank, aber ich denke, es ändert das Alpha-Level des Bildes nicht den Hintergrund des Bildes. Ich muss die Hintergrund-Alpha-Ebene ändern, während das Bild herausgezoomt wird –