2016-07-05 1 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; 
     } 
    }); 
} 

В настоящее время я работаю над анимацией, и у меня есть изображение на ImageView и если я нажимаю, он масштаб изображения (заполняются в экране), затем оно увеличено .изменение фона непрозрачность (альфа-уровень) последовательно андроид

Я использовал this function для создания анимации. Но у меня также есть фоновая (выдвижная папка) изображения, и я хочу, чтобы она увеличивала (и уменьшала) ее непрозрачность, а также уменьшалась и увеличивалась. Я знаю, что мне нужно использовать setAlpha(), но я не могу понять, куда ее поместить. Пожалуйста, помогите ...

+0

Могу ли я узнать значения непрозрачности, которые вы хотите установить. 1. для увеличения, 2. для уменьшения? –

+0

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

+0

Я думаю, что он находится между 0.0 и 1.0, поэтому при масштабировании от 0.0 до 1.0 , и наоборот –

ответ

0

Вам необходимо для создания двух фоновых рисунков: одного с полной непрозрачностью и другого с непрозрачностью 0, тогда вы можете использовать этот код для анимации из одного, переносимого в другой.

Я создал массив drawable, содержащий два выдвижных.

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); 

В startTransition(duration) вы можете установить продолжительность анимации.

+0

Спасибо за ваш ответ, но я думаю, что он меняет альфа-уровень изображения, а не фон –

+0

Извините, но вы можете объяснить, как работает ваш код, потому что я думаю, что он ближе ответить. Единственное отличие заключается в том, что я хочу сменить фон (выдвигаемая папка) альфа, и я думаю, что я должен использовать его. –

+0

'ObjectAnimator.ofFloat (targetView, propertyName, fromValue, toValue)' имя свойства может быть ** 'alpha' ** или **' вращение' **, fromValue и значение Value понятно. –

0

Если рисуется как растровое изображение вы можете сделать это:

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

Для контроллинга Альфа, который до вас

EDIT:

Основано на том, что вы мне сказали:

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

Спасибо, но я боюсь, что вы меня неправильно поняли , потому что я хочу изменить непрозрачность фона, а не –

+0

. Что такое фон? – Zoe

+0

Что он показывает? – Zoe

0

your_image_name.animate(). SetDuration (300) .alpha (0f);

your_image_name = ImageView, может быть что угодно! (Текст/кнопка/Layout)

альфа (0f) = е означает поплавок (0 = 0%, 1 = 100%)

альфа (0.5f) = 50% альфа

Если вы хотите для изменения альфы в то же время, когда вы увеличиваете/уменьшаете масштаб, а затем делайте это при запуске анимации масштабирования!

+0

Спасибо, но я думаю, что он меняет альфа-уровень изображения, а не фон изображения. Мне нужно изменить фоновый альфа-уровень, пока изображение масштабируется и в –

 Смежные вопросы

  • Нет связанных вопросов^_^