2016-06-30 5 views
0

Ich habe eine vertikale Ausrichtung lineares Layout mit Landschaft orientierte Bilder gefüllt.Wie scrollen gezoomte Bilder?

Das Problem ist, dass die Bilder in der vertikalen Ausrichtung sehr klein erscheinen, so dass ich die Zoom-Methode von dev.android verwendet.

Jetzt wird das Bild in seinen ursprünglichen Abmessungen angezeigt, jedoch ist es größer als der Telefonbildschirm. Somit kann der Benutzer nur einen Teil des Bildes sehen. Wie kann ich dem Benutzer ermöglichen, während des Zoomens nach links und rechts zu blättern?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_insane1x1); 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.hide(); 

    final View thumb1View = findViewById(R.id.imageView1); 
    thumb1View.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      zoomImageFromThumb(thumb1View, R.drawable.i1x1); 
     } 
    }); 

    // Retrieve and cache the system's default "short" animation time. 
    mShortAnimationDuration = getResources().getInteger(
      android.R.integer.config_shortAnimTime); 

} 


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

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

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

XML-Datei:

<FrameLayout> 

    <ScrollView> 

     <LinearLayout> 
      <ImageButton /> 
     </LinearLayout> 

    </ScrollView> 

    <ImageView> 

</FrameLayout> 

Antwort

0

Sie haben Ihre Imageview in Scrollview hinzuzufügen. Und vergessen Sie nicht, Scrollview sowohl vertikal als auch horizontal scrollbar zu machen. Ich denke, es wird funktionieren

Verwandte Themen