Android实现下拉放大图片松手自动反d效果

Android实现下拉放大图片松手自动反d效果,第1张

概述本文实例为大家分享了Android实现下拉放大图片松手自动反d的具体代码,供大家参考,具体内容如下

本文实例为大家分享了AndroID实现下拉放大图片松手自动反d的具体代码,供大家参考,具体内容如下

直接看效果:

下面就是代码

headZoomScrollVIEw类

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;  /**  * Created by BAIPEI on 2017/11/21.  */  public class headZoomScrollVIEw extends ScrollVIEw {   private VIEw mZoomVIEw;   private int mZoomVIEwWIDth;   private int mZoomVIEwHeight;    private float firstposition;//记录第一次按下的位置   private boolean isScrolling;//是否正在缩放   private float mScrollRate = 0.3f;//缩放系数,缩放系数越大,变化的越大   private float mReplyRate = 0.5f;//回调系数,越大,回调越慢    public headZoomScrollVIEw(Context context) {     super(context);   }    public headZoomScrollVIEw(Context context,AttributeSet attrs) {     super(context,attrs);   }    public headZoomScrollVIEw(Context context,AttributeSet attrs,int defStyleAttr) {     super(context,attrs,defStyleAttr);   }    public voID setmZoomVIEw(VIEw mZoomVIEw) {     this.mZoomVIEw = mZoomVIEw;   }    public voID setmScrollRate(float mScrollRate) {     this.mScrollRate = mScrollRate;   }    public voID setmReplyRate(float mReplyRate) {     this.mReplyRate = mReplyRate;   }    @OverrIDe   protected voID onFinishInflate() {     super.onFinishInflate();     init();   }    private voID init() {     setoverScrollMode(OVER_SCRolL_NEVER);     if (getChildAt(0) != null) {       VIEwGroup vg = (VIEwGroup) getChildAt(0);       if (vg.getChildAt(0) != null) {         mZoomVIEw = vg.getChildAt(0);       }     }   }    @OverrIDe   public boolean ontouchEvent(MotionEvent ev) {     if (mZoomVIEwWIDth <= 0 || mZoomVIEwHeight <= 0) {       mZoomVIEwWIDth = mZoomVIEw.getMeasureDWIDth();       mZoomVIEwHeight = mZoomVIEw.getMeasuredHeight();     }     switch (ev.getAction()) {       case MotionEvent.ACTION_UP:         //手指离开后恢复图片         isScrolling = false;         replyImage();         break;       case MotionEvent.ACTION_MOVE:         if (!isScrolling) {           if (getScrollY() == 0) {             firstposition = ev.getY();// 滚动到顶部时记录位置,否则正常返回           } else {             break;           }         }         int distance = (int) ((ev.getY() - firstposition) * mScrollRate); // 滚动距离乘以一个系数         if (distance < 0) { // 当前位置比记录位置要小,正常返回           break;         }          // 处理放大         isScrolling = true;         setZoom(distance);         return true; // 返回true表示已经完成触摸事件,不再处理     }     return true;   }    //回d动画   private voID replyImage() {     float distance = mZoomVIEw.getMeasureDWIDth() - mZoomVIEwWIDth;     ValueAnimator valueAnimator = ValueAnimator.offloat(distance,0f).setDuration((long) (distance * mReplyRate));     valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {       @OverrIDe       public voID onAnimationUpdate(ValueAnimator animation) {         setZoom((float) animation.getAnimatedValue());       }     });     valueAnimator.start();   }    public voID setZoom(float zoom) {     if (mZoomVIEwWIDth <= 0 || mZoomVIEwHeight <= 0) {       return;     }     VIEwGroup.LayoutParams lp = mZoomVIEw.getLayoutParams();     lp.wIDth = (int) (mZoomVIEwWIDth + zoom);     lp.height = (int) (mZoomVIEwHeight * ((mZoomVIEwWIDth + zoom) / mZoomVIEwWIDth));     ((marginLayoutParams) lp).setmargins(-(lp.wIDth - mZoomVIEwWIDth) / 2,0);     mZoomVIEw.setLayoutParams(lp);   }  } 

MainActivity里面没有写代码就不粘了

下面是布局activity_main

<bwIE.com.pullListvIEw.headZoomScrollVIEw   xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:ID="@+ID/scrollVIEw"   androID:layout_wIDth="match_parent"   androID:layout_height="match_parent">    <linearLayout     androID:layout_wIDth="match_parent"     androID:layout_height="match_parent"     androID:orIEntation="vertical">      <ImageVIEw       androID:ID="@+ID/iv_show"       androID:layout_wIDth="match_parent"       androID:layout_height="200dp"       androID:layout_weight="1"       androID:src="@drawable/a1"/>     <TextVIEw       androID:layout_wIDth="match_parent"       androID:layout_height="wrap_content"       androID:text="数据1"/>     <TextVIEw       androID:layout_wIDth="match_parent"       androID:layout_height="wrap_content"       androID:text="数据2"/>     <TextVIEw       androID:layout_wIDth="match_parent"       androID:layout_height="wrap_content"       androID:text="数据3"/>     <TextVIEw       androID:layout_wIDth="match_parent"       androID:layout_height="wrap_content"       androID:text="数据4"/>    </linearLayout>  </bwIE.com.pullListvIEw.headZoomScrollVIEw> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Android ListView实现下拉顶部图片变大效果Android仿QQ好友详情页下拉顶部图片缩放效果Android DragImageView实现下拉拖动图片放大效果android ScrollView实现下拉放大头部图片Android自定义scrollView实现顶部图片下拉放大Android开发重写Animation实现下拉图片后d射回去效果示例 总结

以上是内存溢出为你收集整理的Android实现下拉放大图片松手自动反d效果全部内容,希望文章能够帮你解决Android实现下拉放大图片松手自动反d效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1142810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存