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