English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implémentation de scrollView personnalisé Android pour agrandissement de l'image en haut

Dans cet article, je partage avec vous l'exemple de code pour la mise en œuvre de l'agrandissement des images en haut du scrollView, pour votre référence, voici le contenu détaillé

Le défilement en glissement vers le bas et l'agrandissement des images en haut du scrollView a été utilisé plusieurs fois dans les projets suivants, mais chaque fois qu'il est écrit dans l'Activity, c'est très gênant et pas pratique à réutiliser. Ces derniers jours, j'avais du temps, donc j'ai décidé de réutiliser la méthode personnalisée de scrollView pour réaliser cet effet. Le principe est fondamentalement le même que précédemment, donc je ne vais pas en dire plus, je vais directement montrer le code.

package com.example.myapplication.dropzoom; 
import android.animation.ObjectAnimator; 
import android.animation.ValueAnimator; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ScrollView; 
/** 
 * Créé par Liujinhua le 2016/3/25. 
 * Défilement et agrandissement du scrollView en descendant 
 */ 
public class DropZoomScrollView extends ScrollView implements View.OnTouchListener { 
  // Enregistrer la position du premier appui 
  private float mFirstPosition = 0; 
  // Est-ce que l'agrandissement est en cours? 
  private Boolean mScaling = false; 
  private View dropZoomView; 
  private int dropZoomViewWidth; 
  private int dropZoomViewHeight; 
  public DropZoomScrollView(Context context) { 
    super(context); 
  } 
  public DropZoomScrollView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
  } 
  public DropZoomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
  } 
  @Override 
  protected void onFinishInflate() { 
    super.onFinishInflate(); 
    init(); 
  } 
  @Override 
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
  } 
  private void init() { 
    setOverScrollMode(OVER_SCROLL_NEVER); 
    if (getChildAt(0) != null) { 
      ViewGroup vg = (ViewGroup) getChildAt(0); 
      if (vg.getChildAt(0) != null) { 
        dropZoomView = vg.getChildAt(0); 
        setOnTouchListener(this); 
      } 
    } 
  } 
  @Override 
  public boolean onTouch(View v, MotionEvent event) { 
    if (dropZoomViewWidth <= 0 || dropZoomViewHeight <= 0) { 
      dropZoomViewWidth = dropZoomView.getMeasuredWidth(); 
      dropZoomViewHeight = dropZoomView.getMeasuredHeight(); 
    } 
    switch (event.getAction()) { 
      case MotionEvent.ACTION_UP: 
        //restaurer l'image après que le doigt ait quitté 
        mScaling = false; 
        replyImage(); 
        break; 
      case MotionEvent.ACTION_MOVE: 
        if (!mScaling) { 
          if (getScrollY() == 0) { 
            mFirstPosition = event.getY();// enregistrer la position lorsque le défilement atteint le sommet, sinon retourner normalement 
          } else { 
            break; 
          } 
        } 
        int distance = (int) ((event.getY() - mFirstPosition) * 0.6); // la distance de défilement est multipliée par un coefficient 
        if (distance < 0) { // La position actuelle est inférieure à la position enregistrée, retourner normalement 
          break; 
        } 
        // Traitement de l'agrandissement 
        mScaling = true; 
        setZoom(1 + distance); 
        return true; // Retourner true indique que l'événement de touche a été terminé, ne plus traiter 
    } 
    return false; 
  } 
  // Animation de rebond (utilise les animations de propriétés) 
  public void replyImage() { 
    final float distance = dropZoomView.getMeasuredWidth() - dropZoomViewWidth; 
    // Définir l'animation 
    ValueAnimator anim = ObjectAnimator.ofFloat(0.0F, 1.0F).setDuration((long) (distance * 0.7)); 
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator animation) { 
        float cVal = (Float) animation.getAnimatedValue(); 
        setZoom(distance - ((distance) * cVal)); 
      } 
    }); 
    anim.start(); 
  } 
  //Agrandissement 
  public void setZoom(float s) { 
    if (dropZoomViewHeight <= 0 || dropZoomViewWidth <= 0) { 
      return; 
    } 
    ViewGroup.LayoutParams lp = dropZoomView.getLayoutParams(); 
    lp.width = (int) (dropZoomViewWidth + s); 
    lp.height = (int) (dropZoomViewHeight * ((dropZoomViewWidth + s) / dropZoomViewWidth)); 
    dropZoomView.setLayoutParams(lp); 
  } 
} 

l'utilisation est également très simple

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical"> 
  <com.example.myapplication.dropzoom.DropZoomScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:src="@drawable/bg" /> 
      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:src="@drawable/home_bg" /> 
      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:src="@drawable/home_bg" /> 
      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:src="@drawable/home_bg" /> 
      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:src="@drawable/home_bg" /> 
    </LinearLayout> 
  </com.example.myapplication.dropzoom.DropZoomScrollView> 
</LinearLayout> 

Voici la totalité du contenu de cet article, j'espère qu'il vous sera utile dans vos études, et j'espère que vous soutenirez également le tutoriel d'encouragement.

Déclaration : Le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet. Ce site ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer